wpf覆盖listViewItem样式当在XAML工具包中使用材料设计时



我在项目中将材料设计安装在XAML工具包中。我有ListView在本身内包含GridView(带有GridViewColumns),我想在此表中覆盖每行的样式。但是在每种情况下,我都会从XAML工具包中的材料设计中失去样式。

我尝试做几件事:

1)基于目标类型覆盖现有样式:

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

我得到了压倒性的样式,但是在这种情况下,我在GridView中失去了类型识别(列包含正确的标题,但是值包含呼叫结果tostring()方法my model)

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

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

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

3)在其他情况下,我会失去所有材料样式,然后返回WPF默认样式。

希望我们的帮助。

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

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

其他项目的作品相同。这对我的TreeViewitem有帮助,曾经是MaterialDesign风格的,但也被覆盖在我添加了基于基于的属性之前。

<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>

请注意," MaterialLdesignListBoxItem"之后缺少"}",以便:

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

相关内容

  • 没有找到相关文章

最新更新