如何解决listview(+content : gridview) Style.Trigger不起作用的问题

问题描述 投票:0回答:1

这是 C#/xaml WPF 代码,我想使用材料设计,使用触发器来更改背景 但我无法解决 Styl.Triggers 不起作用的问题。请修复并给我一个解决方案

主窗口.xaml

<ListView Height="150" HorizontalAlignment="Stretch" x:Name="networkStatusList"
    ItemContainerStyle="{StaticResource colorListViewItem}">

    <ListView.View>
        <GridView AllowsColumnReorder="False">
            <GridViewColumn Header="상태" CellTemplate="{StaticResource CellTemplate_Connect}" />

            <GridViewColumn Header="IP / Port" CellTemplate ="{StaticResource CellTemplate_IP_Port}"/>
        </GridView>
    </ListView.View>

应用程序.xaml

<ControlTemplate x:Key="Default" TargetType='{x:Type ListViewItem}'>
    <GridViewRowPresenter Content="{TemplateBinding Content}"
                            Columns="{TemplateBinding GridView.ColumnCollection}"/>
</ControlTemplate>



<Style x:Key="colorListViewItem" TargetType="ListViewItem" BasedOn="{StaticResource MaterialDesignListBoxItem}">
    <Setter Property="Height" Value="40"/>
    <Setter Property="Padding" Value="10,5"/>
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="Template" Value="{StaticResource Default}" />

    <Style.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="X">
            <Setter Property="Background" Value="#FFCCCC" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Connect}" Value="O">
            <Setter Property="Background" Value="#CCFFCC" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Connect}" Value="✔">
            <Setter Property="Background" Value="#CCFFCC" />
        </DataTrigger>
    </Style.Triggers>
</Style>

<DataTemplate x:Key="CellTemplate_Connect">
    <TextBlock Text="{Binding Connect}"/>
</DataTemplate>

<GridViewColumn x:Key="GridViewColumn_Connect" Header="상태"
        CellTemplate="{StaticResource CellTemplate_Connect}"/>

<DataTemplate x:Key="CellTemplate_IP_Port">
    <StackPanel Orientation="Vertical">
        <TextBlock Text="{Binding IP}"/>
        <TextBlock Text="{Binding Port}" HorizontalAlignment="Right"/>
    </StackPanel>
</DataTemplate>

enter image description here

鼠标悬停事件,点击事件(材料设计)不起作用,没有效果,没有颜色 触发器不起作用

我想尽快解决

c# wpf xaml listview gridview
1个回答
0
投票

大多数情况下,处于非正常状态的元素的颜色是由控制模板中的触发器确定的。这些触发器通常使用一些带有预定义键的资源。 据我所知,MaterialDesign中有很多这样的资源(数百甚至数千)。因此,您需要在其中找到那些专门在您的元素中使用的主题和样式(模板)。

如果没有合适的键,那么您将必须获取元素模板并对其进行所需的更改。

另一种方法是将所需的可视化分配给其内容,而不是元素本身。在这种情况下,可以在数据模板中完成:

<DataTemplate x:Key="CellTemplate_Connect">
    <TextBlock Text="{Binding Connect}"/>

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" Value="X">
            <Setter Property="Background" Value="#FFCCCC" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Connect}" Value="O">
            <Setter Property="Background" Value="#CCFFCC" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Connect}" Value="✔">
            <Setter Property="Background" Value="#CCFFCC" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

XAML代码是一个演示。我是用手机写的答案,所以不能保证其中没有错误。但我认为您了解如何实现这一点就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.