2010-12-03 3 views
5

가시성을 변경할 수있는 컨트롤에 시각 효과 (예 : 페이드 인, 페이드 아웃)를 추가하고 싶습니다.Silverlight : 보이지 않는 상태 사이에 시각적 전환 추가

어디서부터 시작해야할지 모르겠습니다. VisualStateManager 및 VisualTransform에 대해 조금 읽었지만 가능한지, 무엇을 해야할지 아직 알 수 없습니다. 너 나 좀 도와 줄 수있어?

감사합니다.

답변

6

원하는대로 가능합니다.

ShowStateHideState을 정의하는 VisualStateManager이 필요합니다. 이들은 차례로 가시성을 제어하는 ​​Storyboard을 정의합니다.

그런 다음 애니메이션은 "ShowState"로 보낼 요소에

VisualStateManager.GoToState(uiElement, "ShowState", true); 

를 호출합니다. 상태 이름을 "HideState"로 바꾸면 요소가 숨겨집니다.

VisualStateManager에 사용되는 XAML은 다음과 같습니다. 불투명도를 애니메이션하므로 페이드 인/페이드 아웃이 있습니다. 이들에

<VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="VisualStates"> 
      <VisualState x:Name="ShowState"> 
       <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <EasingDoubleKeyFrame KeyTime="00:00:01" 
               Value="1" /> 
        </DoubleAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:00"> 
          <DiscreteObjectKeyFrame.Value> 
           <Visibility>Visible</Visibility> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </VisualState> 
      <VisualState x:Name="HideState"> 
       <Storyboard> 
        <DoubleAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Opacity)"> 
         <EasingDoubleKeyFrame KeyTime="00:00:01" 
               Value="0" /> 
        </DoubleAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" 
                Storyboard.TargetProperty="(UIElement.Visibility)"> 
         <DiscreteObjectKeyFrame KeyTime="00:00:01"> 
          <DiscreteObjectKeyFrame.Value> 
           <Visibility>Collapsed</Visibility> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 

참고KeyTime 값은 응용 프로그램에 대한 조정이 필요할 수 있습니다. 이것들을 다시 보면 나는 "HideState"시간이 모두 0 인 것을보고, 당신이 원하는 효과를 줄 수는 없다. AnthonyWJones가 응용 프로그램에서 오류를 발견했을 수 있습니다!

+0

+1하지만 DiscreteObjectKeyFrames의 KeyTime이 맞습니까? – AnthonyWJones

+0

@Anthony - 아마 지금 당신이 그것을 언급하게되지 않습니다. 코드 *는 우리의 응용 프로그램에서 작동하는 것으로 나타나지만 예상 한대로 작동하는지 이중으로 확인하지 않았습니다. – ChrisF

+0

예상대로 희미 해지지 않습니다. BeginTime 및 Duration 속성을 잃고 모든 KeyTime 속성을 1 초로 설정할 수 있습니다. 예상되는 동작을 얻습니다. – AnthonyWJones

관련 문제