这是我的绑定数据:
List<MyData> files;
public clas MyData
{
public string Name { get; set; } // Column
public bool IsOK { get; set; } // Not a Column
public string Format { get; set; } // Column
}
我的ListView
:
<ListView
Grid.Row="0"
Name="lvFiles"
ItemsSource="{Binding wiresharkFiles}">
<ListView.ItemContainerStyle>
<DataTrigger Binding="{Binding IsOK}" Value="True">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="Background" Value="Green"/>
</MultiTrigger>
</ListView.ItemContainerStyle>
我有几个ListViewColumns
,因为我想更改名称列的颜色,我将其添加到我的其他列(格式列)GridViewColumn
:
<GridViewColumn Width="115" Header="Format">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock
x:Name="textBlock"
Text="{Binding FileFormat}"
Margin="0,0,0,0"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsOK}" Value="True">
<Setter TargetName="textBlock" Property="Foreground" Value="Silver"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
这不会将此Column
(格式列)标记为红色,但如果IsMouseIsOver
为true
,则此column
仍在Silver
而不会成为{ {1}}在我的White
中定义。
所以我将trigger
更改为:
GridViewColumn
但这仍然无法正常运作。
答案 0 :(得分:1)
将您的触发器保留在ItemContainerStyle
中。只需将Foreground
绑定添加到TextBlock
即可从ListViewItem
&#39; Foreground
获取前景画笔。
<TextBlock x:Name="textBlock"
Text="{Binding FileFormat}"
Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}}"
Margin="0,0,0,0"/>