2011-11-28 27 views
2

WPF에서 VisualState에 대해 배우려고합니다. WPF에서 간단한 VisualState를 만들 수 있습니다. 하지만 문제는 어떻게 다른 VisualState를 다른 컨트롤에 적용 할 수 있는가하는 것입니다.동일한 VisualState를 여러 컨트롤에 적용하는 방법은 무엇입니까?

여기 내 샘플 VisualState 코드입니다.

<Grid x:Name="LayoutRoot" Background="{x:Null}"> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStateGroup"> 
      <VisualStateGroup.Transitions> 
       <VisualTransition GeneratedDuration="0:0:1"> 
        <ei:ExtendedVisualStateManager.TransitionEffect> 
         <ee:FadeTransitionEffect/> 
        </ei:ExtendedVisualStateManager.TransitionEffect> 
       </VisualTransition> 
      </VisualStateGroup.Transitions> 
      <VisualState x:Name="MySate"> 
       <Storyboard> 
        <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Background).(SolidColorBrush.Color)" Storyboard.TargetName="textBlock"> 
         <EasingColorKeyFrame KeyTime="0" Value="#FFF31515"/> 
        </ColorAnimationUsingKeyFrames> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
    <VisualStateManager.CustomVisualStateManager> 
     <ei:ExtendedVisualStateManager/> 
    </VisualStateManager.CustomVisualStateManager> 

    <Grid Height="132" Margin="58,80,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="230"> 
     <TextBlock x:Name="textBlock" Margin="54,37,35,48" TextWrapping="Wrap" Text="TextBlock" Background="Black"/> 
    </Grid> 
    <Grid Height="132" Margin="58,80,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="230"> 
     <TextBlock x:Name="textBlock2" Margin="54,37,35,48" TextWrapping="Wrap" Text="TextBlock" Background="Black"/> 
    </Grid> 
    <Button x:Name="yyyyy" Content="Button" HorizontalAlignment="Right" Height="70" Margin="0,8,30,0" VerticalAlignment="Top" Width="148" Click="Clickbd"/> 
</Grid> 

C 번호 :

private void Clickbd(object sender, System.Windows.RoutedEventArgs e) 
{ 
     VisualStateManager.GoToElementState(LayoutRoot, "MySate", true); 
} 

이 VisualState 성공적으로 TextBlock에 제어를 위해 일한다. 이 VisualState를 에 적용하고 싶습니다. textBlock2

감사합니다.

답변

3

다른 컨트롤간에 공유 할 수있는 템플릿에 VisualState을 추가해야합니다.

내가 코드를 테스트하지 않은,하지만이 같은 트릭 수행해야합니다

<Style TargetType="TextBlock"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="TextBlock"> 
     <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="VisualStateGroup"> 
       <VisualStateGroup.Transitions> 
        <VisualTransition GeneratedDuration="0:0:1"> 
         <ei:ExtendedVisualStateManager.TransitionEffect> 
          <ee:FadeTransitionEffect/> 
         </ei:ExtendedVisualStateManager.TransitionEffect> 
        </VisualTransition> 
       </VisualStateGroup.Transitions> 
       <VisualState x:Name="MySate"> 
        <Storyboard> 
         <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(TextElement.Background).(SolidColorBrush.Color)" Storyboard.TargetName="contentPresenter"> 
          <EasingColorKeyFrame KeyTime="0" Value="#FFF31515"/> 
         </ColorAnimationUsingKeyFrames> 
        </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <VisualStateManager.CustomVisualStateManager> 
      <ei:ExtendedVisualStateManager/> 
     </VisualStateManager.CustomVisualStateManager> 

     <ContentPresenter x:Name="contentPresenter" /> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 
+0

당신이 나에게 예를 줄 수 있습니까? – Vero009

+0

나는 손가락이'TextBlock'을 쓰는 동안 내 마음이'TextBox'를 생각하고있는 것으로 나타 났으므로 위 코드는 아마 예상대로 작동하도록 수정해야 할 것입니다. – madd0

+0

괜찮습니다. 나는 이해한다. 감사합니다. – Vero009

관련 문제