来自父控件的样式触发器

Style trigger from parent control

是否可以使用来自另一个控件的样式触发器?

我有 Border 控件,它位于网格每一行的指示器部分(指示器是最左边带有小箭头的部分)。我想根据该行是否为 selected 来设置背景。所以我创建了一个样式:

<controls:SelectionConverter x:Key="SelectionConverter" />
<Style x:Key="SelectionStyle" TargetType="Border">
  <Setter Property="Background" Value="{Binding Converter={StaticResource SelectionConverter}}"/>
  <Style.Triggers>
    <!-- here I want to have a trigger which reacts on a property of the grid control -->
  </Style.Triggers>
</Style>

然后边框控件会使用样式(实际上有3个边框控件)。

SelectionConverter 将 return 根据行的正确颜色(效果很好)。

问题是当我 select 一个不同的单元格时背景没有更新(这确实有意义,因为没有触发何时更新它)。

是否可以设置父控件的触发器?

某事独行

<Trigger Property="ParentControl.SelectionHasChanged" Value="True"></Trigger>

您应该可以在 Binding 中使用 ElementName 来实现这一点。例如,以下绑定到 GridIsEnabled 属性 并将 BorderBackground 属性 设置为红色true:

<Grid x:Name"main_grid">
    ...
    <controls:SelectionConverter x:Key="SelectionConverter" />
    <Style x:Key="SelectionStyle" TargetType="Border">
        <Setter Property="Background" Value="{Binding Converter={StaticResource SelectionConverter}}"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsEnabled, ElementName=main_grid}" Value="True">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
    ...
</Grid>