WPF 在使用 Material Design In XAML Toolkit 时覆盖 ListViewItem 样式

WPF overriding ListViewItem style when use Material Design In XAML Toolkit

我在我的项目中安装了 Material Design In XAML 工具包。我有一个 ListView,它本身包含 GridView(带有 GridViewColumns),我想覆盖此 table 中每一行的样式。但在每种情况下,我都会丢失 Material Design In XAML Toolkit 中的样式。

我试过做几件事:

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

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

我得到了覆盖样式,但在这种情况下,我在 GridView 中失去了类型识别(列包含正确的 headers,但值包含调用结果 ToString() 方法我的模型)

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

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

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

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

希望得到我们的帮助。

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

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

请注意 "MaterialDesignListBoxItem" 后少了一个“}”,因此:

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

其他项目也是如此。这对我以前采用 MaterialDesign 风格的 TreeViewItem 很有帮助,但在我添加 BasedOn 属性.

之前也被覆盖了
<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>