Использование триггера со свойством от родителя
У меня есть Сетка с ToggleButton. ToggleButton имеет ControlTemplate, и в этом ControlTemplate я определил эллипс и путь. Atm цвет на Ellipse и Path изменяется, если свойство ToggleButtons IsMouseOver имеет значение true. Теперь я хочу изменить цвет, если свойство Grids IsMouseOver также имеет значение true. Но я не могу заставить его работать.
Мой код выглядит
<Grid Height="26"
x:Name="GroupboxHeader"
Background="Blue">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ToggleButton Grid.Column="1"
HorizontalAlignment="Right"
Margin="0 0 5 0"
OverridesDefaultStyle="True"
Background="LightGray"
Height="19"
Width="19">
<ToggleButton.Template>
<ControlTemplate>
<Grid>
<Grid.LayoutTransform>
<TransformGroup>
<TransformGroup.Children>
<TransformCollection>
<RotateTransform Angle="90" />
</TransformCollection>
</TransformGroup.Children>
</TransformGroup>
</Grid.LayoutTransform>
<Ellipse x:Name="circle"
HorizontalAlignment="Center"
Height="19"
Stroke="White"
VerticalAlignment="Center"
Width="19" />
<Path x:Name="arrow"
Data="M 1,1.5 L 4.5,5 L 8,1.5"
HorizontalAlignment="Center"
SnapsToDevicePixels="false"
Stroke="White"
StrokeThickness="2"
VerticalAlignment="Center" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="true">
<Setter Property="Stroke"
TargetName="circle"
Value="LightGray" />
<Setter Property="Stroke"
TargetName="arrow"
Value="LightGray" />
</Trigger>
<DataTrigger Binding="{Binding ElementName=GroupboxHeader, Path=IsMouseOver}">
<Setter Property="Stroke"
TargetName="circle"
Value="LightGray" />
<Setter Property="Stroke"
TargetName="arrow"
Value="LightGray" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>
</Grid>
1 ответ
Измените свой эллипс / ход траектории на {TemplateBinding BorderBrush}
и вместо того, чтобы использовать TargetName
в ваших триггерах меняются BorderBrush
на вашей кнопке. Таким образом, вы можете добавить триггеры на сетке с TargetName
установите на свою кнопку переключения для достижения желаемого поведения.
РЕДАКТИРОВАТЬ:
Поскольку это не в шаблоне управления, TargetName
не найдет дочерние элементы. Вместо этого вы можете установить триггеры: <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid}}" Value="True">
внутри вашего ToggleButton
стиль.