Wpf 如何基于父对象的AlternateIndex设置子对象的样式?

Wpf 如何基于父对象的AlternateIndex设置子对象的样式?,wpf,xaml,wpf-style,Wpf,Xaml,Wpf Style,我用的是HeaderedItemControl。每个项目是一个3列网格,每列中有边框和文本块。我想在每个项目的边框背景色交替。(基本交替行背景效果。)我尝试在UserControl级别为网格创建一个样式,根据包含控件的AlternationalIndex将背景颜色应用于其中的所有边框: <Style TargetType="Grid" x:Key="myItemsGrid"> <Style.Resources> <Style TargetType="Bo

我用的是HeaderedItemControl。每个项目是一个3列网格,每列中有边框和文本块。我想在每个项目的边框背景色交替。(基本交替行背景效果。)我尝试在UserControl级别为网格创建一个样式,根据包含控件的AlternationalIndex将背景颜色应用于其中的所有边框:

<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,以便每隔一行的边框背景颜色都会改变。我试图将相对资源指向HeaderedItemsControl和ItemsControl,但两者似乎都不是合适的目标。我已经浏览了实时视觉树,但在那里我找不到任何参考


非常感谢您的帮助。

您必须在ItemsControl项上查找替代索引,而不是ItemsControl本身!但您必须在绑定中搜索哪种类型?例如,在ListBox中它是一个ListBoxItem,而在ItemsControl中它是一个ContentPresenter
不要忘记路径=(ItemsControl.alternationadex),对于您的情况(alternationadex==2),您必须将ItemsControl中的alternationationcount至少设置为3!因此,该代码应该可以工作:

<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2">
    <Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>

您必须在ItemsControl的项上查找替代索引,而不是在ItemsControl本身上!但您必须在绑定中搜索哪种类型?例如,在ListBox中它是一个ListBoxItem,而在ItemsControl中它是一个ContentPresenter
不要忘记路径=(ItemsControl.alternationadex),对于您的情况(alternationadex==2),您必须将ItemsControl中的alternationationcount至少设置为3!因此,该代码应该可以工作:

<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2">
    <Setter Property="Background" Value="{StaticResource color_LogoLight}" />
</DataTrigger>


有两件事。。。ContentPresenter有点让我错过了。我理解这个概念,但在本例中,我无法辨别是什么充当了“ListBoxItem”。而且,出于某种原因,括号会起作用,因为没有括号就不起作用。非常有用。谢谢你的回复。有两件事。。。ContentPresenter有点让我错过了。我理解这个概念,但在本例中,我无法辨别是什么充当了“ListBoxItem”。而且,出于某种原因,括号会起作用,因为没有括号就不起作用。非常有用。谢谢你的回复。