2013-06-24 16 views
0

我试图写在XAML的按钮控件模板动画一个RotateTransform。在Triggers集合中,我想使用RotateTransform旋转按钮的一个元素,该元素稍后会变为动画(为简单起见,请将动画关闭)。为此,我需要引用附加到按钮元素的旋转变换的Angle属性。这是问题:我似乎无法找到一种方法来引用它。下面是代码:不能找到一种方法在控件模板

<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> 

我试图给RotateTransform的名称用x:名称=“myTransform”,用它作为的TargetName在二传手参考。这没有奏效。尝试的其他事情是“点缀”像TargetName="OuterCircle.RenderTransofrm.RotateTransform"。也没有喜乐。

看来,这应该是很容易的,大概是。有人能指引我朝着正确的方向吗?

谢谢,克里斯。

回答

1

其实你可以在设置Storyboard.TargetName访问myTransform

<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> 
+0

谢谢,克莱门斯,你的解决方案的工作!只是为了增强我个人的学习体验:这将如何与财产触发器,你不能使用'Storyboard.TargetName'?换句话说:有没有办法让原始示例工作?这样做的魅力在于,你只需要'IsMouseOver = True'上的一个触发器,而不是两个EventTrigger。 –

相关问题