0

我有一个带有 ToggleButton 的网格。ToggleButton 有一个 ControlTemplate,在这个 ControlTemplate 中我定义了一个椭圆和一个路径。如果 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>
4

1 回答 1

3

将您的椭圆/路径笔划更改为{TemplateBinding BorderBrush},而不是TargetName在您的触发器中使用更改BorderBrush按钮。这样,您可以在网格上添加触发器并TargetName设置为您的切换按钮以实现所需的行为。

编辑:

由于这不在控件模板中,TargetName因此不会找到子元素。相反,您可以将触发器设置为:

<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType=Grid}}" Value="True">

在你的ToggleButton风格里面。

于 2014-05-14T09:28:02.233 回答