Использование триггера со свойством от родителя

У меня есть Сетка с 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 стиль.

Другие вопросы по тегам