在XAML Toolkit中使用Material Design时,WPF重写ListViewItem样式

时间:2017-09-24 21:01:30

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

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

我尝试过几件事:

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

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

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

2)我使用了材料设计中的具体样式在XAML Toolkit中 - MaterialDesignGridViewItem:

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

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

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

希望得到我们的帮助。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

其他项目也一样。这可以帮助我使用曾经采用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>

答案 2 :(得分:0)

请注意,“ MaterialDesignListBoxItem”之后缺少“}”,因此:

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