2013-03-01 94 views
0

我是WinRT/XAML开发新手。经过几个小时的网络研究和许多尝试和错误尝试后,我仍然无法理解如何使用VisualStateManager根据用户对对象的输入更改椭圆的填充颜色。以下代码不起作用。下面是代码今天因为它位于:WinRT/XAML在鼠标上改变椭圆的填充颜色

<Ellipse Stroke="White" StrokeThickness="5" Width="90" Height="90"> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal"/> 
       <VisualState x:Name="MouseOver"> 
        <Storyboard> 
         <ColorAnimation To="Red" Storyboard.TargetName="Ellipse" Storyboard.TargetProperty="Fill.Color"/> 
        </Storyboard> 
       </VisualState> 
       <VisualStateGroup.Transitions> 
        <VisualTransition To="Normal" GeneratedDuration="00:00:01"/> 
        <VisualTransition To="MouseOver" GeneratedDuration="00:00:01"/> 
       </VisualStateGroup.Transitions> 
      </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 
    </Ellipse> 

UPDATE:

谢谢尼古拉斯W.在正确的方向轻推。我错过了模板以及正确的目标属性。下面的代码如预期运行:

<Button> 
      <Button.Template> 
       <ControlTemplate> 
        <Grid> 
         <Ellipse x:Name="myEllipse" Stroke="White" StrokeThickness="5" Width="70" Height="70" Fill="Transparent"/> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <ColorAnimation Storyboard.TargetName="myEllipse" To="#FF0061D4" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" Duration="0:0:0"/> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
        </Grid> 
       </ControlTemplate> 
      </Button.Template> 
     </Button> 
+0

我的WinRT技能是有限的;但是TargetName会拒绝一个不存在的元素。 Ellipse是对象名称,而不是它的“名称”,尝试删除TargetName,然后动画将定位该元素本身。如果这不起作用,请给你Ellipse一个名字和参考。 – dowhilefor 2013-03-01 15:05:56

回答

1

有一些问题在这里,首先没有什么导致视觉状态管理状态之间转换,其次是参照“椭圆”目标没有解决,第三,没有定义要执行彩色动画的画笔。如果您要重新设定一个已经在使用视觉状态的控件,第一部分将会为您完成,否则您需要设置显式状态转换(example)。要使参考起作用,您可以为该元素指定一个名称,并且不要将VisualStateGroups附加属性嵌套在元素本身中(或者通过画笔名称的动画as per the MSDN example)。最后一部分只涉及到最初设置画笔,在该画笔上您为Color属性设置了动画。以模拟示例Button

<Button> 
     <Button.Template> 
      <ControlTemplate> 
       <Grid> 
        <Ellipse x:Name="Ellipse" Stroke="White" StrokeThickness="5" Width="90" Height="90" 
          Fill="Black"/> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="MouseOver"> 
           <Storyboard> 
            <ColorAnimation Storyboard.TargetName="Ellipse" To="Red" Storyboard.TargetProperty="Fill.Color"/> 
           </Storyboard> 
          </VisualState> 
          <VisualStateGroup.Transitions> 
           <VisualTransition To="Normal" GeneratedDuration="00:00:01"/> 
           <VisualTransition To="MouseOver" GeneratedDuration="00:00:01"/> 
          </VisualStateGroup.Transitions> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </Grid> 
      </ControlTemplate> 
     </Button.Template> 
    </Button>