1

我正在尝试为WPF Expander控件创建一个ControlTemplate,但是我碰到了一个试图为Expanded和Collasped状态设置动画的路障。这个VisualStateManager为什么只触发一次动画?

当应用程序最初启动时,我的Expanded状态动画会触发一次,但在此之后不再触发。

我不知道发生了什么在这里,但这里是我的ControlTemplate目前看起来像:(我有一些虚假为了只是用于测试值)

<ControlTemplate TargetType="Expander" x:Key="RightExpander"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Name="ContentColumn" Width="0" /> 
      </Grid.ColumnDefinitions> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup x:Name="ExpansionStates"> 
        <VisualState x:Name="Expanded"> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="Content" Storyboard.TargetProperty="(RenderTransform).(TranslateTransform.X)" To="-50" From="0" 
           Duration="0:0:0.3" /> 
         </Storyboard> 
        </VisualState> 
        <VisualState x:Name="Collasped"> 
         <Storyboard> 
          <DoubleAnimation Storyboard.TargetName="Content" 
Storyboard.TargetProperty="(RenderTransform).(TranslateTransform.X)" 
           To="50" From="0" Duration="0:0:0.3" /> 
         </Storyboard> 
        </VisualState> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Border Grid.Row="0" BorderThickness="1" Panel.ZIndex="1" > 
       <Grid> 
        <ToggleButton IsChecked="{Binding IsExpanded, Mode=TwoWay, 
          RelativeSource={RelativeSource 
          TemplatedParent}}"></ToggleButton> 
        <ContentPresenter ContentSource="Header" 
          RecognizesAccessKey="True" 
          IsHitTestVisible="False" /> 
       </Grid> 
      </Border> 
      <Border Name="Content" Grid.Column="1" BorderThickness="0,1,1,1" 
       CornerRadius="0,5,5,0" Background="Pink" RenderTransformOrigin="0,0"> 
       <Border.RenderTransform> 
        <TranslateTransform X="0" Y="0" /> 
       </Border.RenderTransform> 
       <ContentPresenter Margin="4" /> 
      </Border> 
     </Grid> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsExpanded" Value="True"> 
       <Setter TargetName="ContentColumn" Property="Width" Value="{Binding 
        ElementName=Content, Path=DesiredSize.Width}" /> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 

我在做什么错?

+0

哪里的视觉状态管理器代码?除了声明之外,我在模板中看不到任何对动画的引用。你也拼写错了 - 你能发布你的代码吗?啊 - 看到你模板化了现有的扩展器 - 难道只是拼写错误? – Charleh 2012-08-10 16:50:44

回答

3

我的猜测是拼写错误折叠(Collasped)

也许VSM未发现因拼写错误的故事板

+0

就是这样!非常感谢! :d – 2012-08-10 17:03:39