在 Items 控件中混合使用数据触发器和常规触发器
Mixing a Data Trigger with a Regular Trigger in an Items Control
我为我的 ItemsControl 设置了一个完美运行的触发器:
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"></Setter>
</Trigger>
</DataTemplate.Triggers>
我的问题是有时候,我必须在列表中插入一个 "special line"。
我使用以下触发器来操作模板中的控件:
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
这个效果很好,我得到了我想要显示的内容。
现在,我的问题是我想合并它们,这样无论 AlternationIndex 中的数字是多少,Special line 都会获得白色背景。
这可以做到吗?
完整代码如下:
<ItemsControl Margin="0 0 0 30" Name="CtrlOrderDetails" AlternationCount="2">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid x:Name="Foobar">
<TextBlock Text="{Binding ProdcutName}" Margin="0 5 0 5" FontSize="16">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding headerText}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="FontSize" Value="16"></Setter>
<Setter Property="Foreground" Value="Blue"></Setter>
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Margin" Value="0 10 0 5 "/>
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"></Setter>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl>
尝试在 DataTemplate 中使用 Style 中的相同 DataTrigger,但使用 setter 作为背景
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"/>
</Trigger>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Background" Value="White" TargetName="Foobar"/>
</DataTrigger>
</DataTemplate.Triggers>
我为我的 ItemsControl 设置了一个完美运行的触发器:
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"></Setter>
</Trigger>
</DataTemplate.Triggers>
我的问题是有时候,我必须在列表中插入一个 "special line"。
我使用以下触发器来操作模板中的控件:
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
这个效果很好,我得到了我想要显示的内容。
现在,我的问题是我想合并它们,这样无论 AlternationIndex 中的数字是多少,Special line 都会获得白色背景。
这可以做到吗?
完整代码如下:
<ItemsControl Margin="0 0 0 30" Name="CtrlOrderDetails" AlternationCount="2">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid x:Name="Foobar">
<TextBlock Text="{Binding ProdcutName}" Margin="0 5 0 5" FontSize="16">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBlock Text="{Binding headerText}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="FontSize" Value="16"></Setter>
<Setter Property="Foreground" Value="Blue"></Setter>
<Setter Property="Visibility" Value="Collapsed"/>
<Setter Property="Margin" Value="0 10 0 5 "/>
<Style.Triggers>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"></Setter>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl>
尝试在 DataTemplate 中使用 Style 中的相同 DataTrigger,但使用 setter 作为背景
<DataTemplate.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGray" TargetName="Foobar"/>
</Trigger>
<DataTrigger Binding="{Binding isHeaderLine}" Value="true">
<Setter Property="Background" Value="White" TargetName="Foobar"/>
</DataTrigger>
</DataTemplate.Triggers>