如何通过DataTrigger设置Panel.ZIndex或其他附加属性



当某个视图模型进入脱机状态时,我正试图让一个圆形覆盖达到顶部。因此,它变得部分透明,并位于网格中的其他元素之上。

到目前为止,样式中的DataTriggers已经适用于所有情况,但我无法设置Panel.ZIndex。在构建或运行中没有错误,但属性没有设置(我认为是因为它是附加属性?)

<Ellipse Fill="DarkGray" Panel.ZIndex="-10" Width="50" Height="50">
  <Ellipse.Style TargetType="Ellipse">
    <Style>
      <Style.Triggers>
        <DataTrigger Binding="{Binding Status}" Value="Offline">
            <Setter Property="Opacity" Value=".6" />
            <Setter Property="Panel.ZIndex" Value="10" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Ellipse.Style>
</Ellipse>

语法正确,但问题是在<Ellipse>标记中定义Panel.ZIndex,并且标记本身中设置的属性将优先于任何触发的值。

要修复它,只需在您的风格中设置Panel.ZIndex,而不是Ellipse标签

<Ellipse Fill="DarkGray" Width="50" Height="50">
  <Ellipse.Style TargetType="Ellipse">
    <Style>
      <Setter Property="Panel.ZIndex" Value="-10" />
      <Style.Triggers>
        <DataTrigger Binding="{Binding Status}" Value="Offline">
            <Setter Property="Opacity" Value=".6" />
            <Setter Property="Panel.ZIndex" Value="10" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Ellipse.Style>
</Ellipse>

有关更多信息,请参阅MSDN关于依赖属性优先级的文章

最新更新