如何覆盖ListViewItem样式?

时间:2017-12-30 15:42:10

标签: wpf xaml material-design-in-xaml

我试图使用以下代码覆盖ListViewItem样式:

  <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}" BasedOn="{StaticResource MaterialDesignListViewItem}">
            <EventSetter Event="PreviewMouseLeftButtonDown"
                         Handler="ListViewItem_PreviewMouseLeftButtonDown" />

        </Style>
    </ListView.ItemContainerStyle>

遗憾的是MaterialDesignListViewItem似乎没有MaterialDesignInXaml,因此我找不到StaticResource下划线。

我的目标是在鼠标悬停在某个项目上时更改选择的颜色。

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

所以这里有一些事情发生。

在MDIX中,有两种用于ListView的样式。分组的样式MaterialDesignGridViewItem和普通MaterialDesignListBoxItem。要覆盖其中任何一种样式,您需要手动引入相应的资源字典(分别为MaterialDesignTheme.ListView.xamlMaterialDesignTheme.ListBox.xaml)。

我认为你正在寻找这样的东西:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignListBoxItem}">
        <Style.Resources>
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.ListBox.xaml" />
        </Style.Resources>
        <EventSetter Event="PreviewMouseLeftButtonDown"
                     Handler="ListViewItem_PreviewMouseLeftButtonDown" />
    </Style>
</ListView.ItemContainerStyle>