2010-12-17 40 views
0

これは私を困惑させました。だから私はマウスがそれの上にぶら下がっているときに境界要素の不透明度をアニメーション化する予定の次のサンプルアプリケーションがあります。 `VisualStateManager.GoToStateは常にfalseを返します

<UserControl.Resources> 
    <Style x:Key="borderstyle" TargetType="ContentControl"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Grid> 

         <VisualStateManager.VisualStateGroups> 

          <VisualStateGroup> 
           <VisualState x:Name="FirstState"> 
            <Storyboard> 
             <DoubleAnimation To="1.0" Storyboard.TargetName="border" Storyboard.TargetProperty="Opacity" FillBehavior="HoldEnd"/> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 

         </VisualStateManager.VisualStateGroups> 

         <Border Background="Blue" x:Name="border" Opacity="0.0"/> 

        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
</UserControl.Resources> 


<Grid x:Name="LayoutRoot" Background="White"> 
    <Border BorderBrush="Red" BorderThickness="1" Width="51" Height="51"> 
     <ContentControl Width="50" Height="50" Style="{StaticResource borderstyle}" MouseEnter="OnMouseEntered" /> 
    </Border> 
</Grid> 

`

そして、私は次のコードを持っているの背後にあるコードで...

private void OnMouseEntered(object sender, MouseEventArgs e) 
    { 
     bool status = VisualStateManager.GoToState(this, "FirstState", true); 
    } 

そして...何も起こりません。 ステータスは常にfalseで、アニメーションは決して起動しません。

私はここに何が欠けているのかわかりません。

答えて

3

あなたは状態が変化しているコントロールとしてあなたのContentControlを指定する必要があります。

private void OnMouseEntered(object sender, MouseEventArgs e) 
{ 
    bool status = VisualStateManager.GoToState((ContentControl)sender, "FirstState", false); 
} 
+0

ワウ...クールな感謝。私は通常、カスタムコントロールを構築し、 "この"正常に動作するので、私は困惑していたと思う。今私は:)おかげで – Senkwe

1

はコントロールが動的にあるときに(プログラム的に)状態遷移のため

1

使用VisualStateManagerを追加したときに必要な(自分のコントロールにApplyTemplate()を追加いつでもまたはその後にページロードされたイベントハンドラ

関連する問題