1

我正在尝试为 XAML 中的按钮编写 ControlTemplate。在 Triggers 集合中,我想使用 RotateTransform 旋转按钮的一个元素,稍后将获得动画效果(为简单起见,关闭动画)。为此,我需要参考附加到按钮元素的旋转变换的角度属性。这就是问题所在:我似乎找不到引用它的方法。这是代码:

<ControlTemplate x:Key="myButtonTemplate"
                 TargetType="Button">
    <Grid>
        <Ellipse x:Name="OuterCircle"
                 RenderTransformOrigin="0.5, 0.5">
            <Ellipse.Fill>
                <RadialGradientBrush Center="0.7,0.7">
                    <GradientStop Offset="0.9" Color="DarkBlue"/>
                    <GradientStop Offset="0.2" Color="White"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
            <Ellipse.RenderTransform>
                <RotateTransform x:Name="myTransform" Angle="0"/>
            </Ellipse.RenderTransform>
        </Ellipse>
        <Ellipse x:Name="InnerCircle"
                 RenderTransformOrigin="0.5, 0.5"
                 Stroke="DarkBlue"
                 >
            <Ellipse.Fill>
                <RadialGradientBrush Center="0.35,0.35"
                                     RadiusX="0.7"
                                     RadiusY="0.7">
                    <GradientStop Offset="0.05" Color="#70B0FF"/>
                    <GradientStop Offset="0.9" Color="DarkBlue"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
            <Ellipse.RenderTransform>
                <ScaleTransform ScaleX="0.8" ScaleY="0.8"/>
            </Ellipse.RenderTransform>
        </Ellipse>
        <Viewbox Margin="10">
            <ContentPresenter Margin="{TemplateBinding Padding}"/>
        </Viewbox>
    </Grid>

    <ControlTemplate.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter TargetName="myTransform" Property="Angle" Value="90"/>
        </Trigger>
    </ControlTemplate.Triggers>

</ControlTemplate>

我试图通过 x:Name="myTransform" 为 RotateTransform 命名,并将其用作 Setter 中的 TargetName。这没有用。尝试过的其他事情是“打点”,例如TargetName="OuterCircle.RenderTransofrm.RotateTransform". 也没有欢乐。

看起来这应该很容易,而且可能很容易。有人可以指出我正确的方向吗?

谢谢, - 克里斯。

4

1 回答 1

0

实际上,您可以myTransform在设置时访问Storyboard.TargetName

<ControlTemplate.Triggers>
    <EventTrigger RoutedEvent="MouseEnter">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Storyboard.TargetName="myTransform"
                                 Storyboard.TargetProperty="Angle"
                                 To="90" Duration="0:0:0.1"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
    <EventTrigger RoutedEvent="MouseLeave">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Storyboard.TargetName="myTransform"
                                 Storyboard.TargetProperty="Angle"
                                 To="0" Duration="0:0:0.1"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</ControlTemplate.Triggers>
于 2013-06-24T11:32:40.170 回答