这是 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>
鼠标悬停事件,点击事件(材料设计)不起作用,没有效果,没有颜色 触发器不起作用
我想尽快解决
大多数情况下,处于非正常状态的元素的颜色是由控制模板中的触发器确定的。这些触发器通常使用一些带有预定义键的资源。 据我所知,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代码是一个演示。我是用手机写的答案,所以不能保证其中没有错误。但我认为您了解如何实现这一点就足够了。