在XAML工具包中使用Material Design时WPF覆盖ListViewItem样式

WPF overriding ListViewItem style when use Material Design In XAML Toolkit

我将XAML Toolkit中的Material Design安装到了我的项目中。 我有ListView本身包含GridView(带有GridViewColumns),并且我想覆盖此表中每一行的样式。 但是在每种情况下,我都会从XAML Toolkit中的Material Design中丢失样式。

我尝试做几件事:

1)根据目标类型覆盖现有样式:

1
2
3
4
5
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}">
        <Setter Property="Background" Value="Green" />
    </Style>
</ListView.ItemContainerStyle>

我有重载的样式,但是在这种情况下,我在GridView中失去了类型识别能力(列包含正确的标题,但是值包含模型的调用结果ToString()方法)

2)我使用了XAML Toolkit中的Material Design中的具体样式-MaterialDesignGridViewItem:

1
2
3
4
5
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignGridViewItem">
        <Setter Property="Background" Value="Green" />
    </Style>
</ListView.ItemContainerStyle>

在这种情况下,我得到了工作解决方案(看起来),但是当我确实添加触发器时,我失去了材质样式(仅获得颜色,而没有动画)。

3)在其他情况下,我会丢失所有的材质样式,并返回到WPF默认样式。

希望对我们有所帮助。


1
2
3
4
5
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignListBoxItem">
        <Setter Property="Background" Value="Green" />
    </Style>
</ListView.ItemContainerStyle>

您的扩展样式应基于MaterialDesignListBoxItem,而不是使用MaterialDesignGridViewItem。


其他项目也一样。 这帮助了我使用曾经采用MaterialDesign风格的TreeViewItem,但在我添加BasedOn属性之前,它也被覆盖了。

1
2
3
4
5
6
7
8
9
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource MaterialDesignTreeViewItem}">
        <EventSetter Event="TreeViewItem.DragOver"  Handler="treeView_DragOver"/>
        <EventSetter Event="TreeViewItem.Drop" Handler="treeView_Drop"/>
        <EventSetter Event="TreeViewItem.MouseMove" Handler="treeView_MouseMove"/>
        <EventSetter Event="TreeViewItem.MouseLeftButtonDown" Handler="treeView_MouseDown"/>
        <EventSetter Event="TreeViewItem.MouseRightButtonDown" Handler="treeView_MouseRightDown"/>
    </Style>
</TreeView.ItemContainerStyle>

请注意," MaterialDesignListBoxItem"后面缺少"}",因此:

1
<Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignListBoxItem}">