如何根据父项的备用索引设置子项的样式?
How do I set the style of a child based on AlternateIndex of parent?
我正在使用 HeaderedItemsControl。每个项目都是一个 3 列的网格,每列中有一个边框和一个文本块。我希望每个项目中边框的背景颜色交替。 (基本的交替行背景效果。)我试图在 UserControl 级别为 Grid 创建一个样式,该样式基于包含控件的 AlternationIndex 将背景颜色应用于其中的所有边框:
<Style TargetType="Grid" x:Key="myItemsGrid">
<Style.Resources>
<Style TargetType="Border">
<Setter Property="Background" Value="Azure" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AlternationIndex, RelativeSource={RelativeSource AncestorType=ItemsControl}}" Value="2">
<Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
Setter 位有效,因为边框都是 "Azure"。但是我如何正确引用 AlternationIndex 以便每隔一行更改边框背景颜色。我尝试将 RelativeSource 指向 HeaderedItemsControl 和 ItemsControl,但似乎都不是正确的目标。我浏览了实时可视化树,但在那里找不到任何可参考的内容。
感谢任何帮助。
您必须在 ItemsControl 的 Item 上寻找 AlternationIndex,而不是 ItemsControl 本身!但是您必须在绑定中搜索哪种类型?例如,在 ListBox 中它是一个 ListBoxItem,而在 ItemsControl 中它是一个 ContentPresenter.
不要忘记 Path=(ItemsControl.AlternationIndex)
并且对于您的情况 (AlternationIndex==2) 您必须至少在 ItemsControl 中设置 AlternationCount 3!所以这段代码应该有效:
<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2">
<Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>
我正在使用 HeaderedItemsControl。每个项目都是一个 3 列的网格,每列中有一个边框和一个文本块。我希望每个项目中边框的背景颜色交替。 (基本的交替行背景效果。)我试图在 UserControl 级别为 Grid 创建一个样式,该样式基于包含控件的 AlternationIndex 将背景颜色应用于其中的所有边框:
<Style TargetType="Grid" x:Key="myItemsGrid">
<Style.Resources>
<Style TargetType="Border">
<Setter Property="Background" Value="Azure" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=AlternationIndex, RelativeSource={RelativeSource AncestorType=ItemsControl}}" Value="2">
<Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Style.Resources>
</Style>
Setter 位有效,因为边框都是 "Azure"。但是我如何正确引用 AlternationIndex 以便每隔一行更改边框背景颜色。我尝试将 RelativeSource 指向 HeaderedItemsControl 和 ItemsControl,但似乎都不是正确的目标。我浏览了实时可视化树,但在那里找不到任何可参考的内容。
感谢任何帮助。
您必须在 ItemsControl 的 Item 上寻找 AlternationIndex,而不是 ItemsControl 本身!但是您必须在绑定中搜索哪种类型?例如,在 ListBox 中它是一个 ListBoxItem,而在 ItemsControl 中它是一个 ContentPresenter.
不要忘记 Path=(ItemsControl.AlternationIndex)
并且对于您的情况 (AlternationIndex==2) 您必须至少在 ItemsControl 中设置 AlternationCount 3!所以这段代码应该有效:
<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2">
<Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>