2013-11-28 4 views
3

왜 Windows 코드 숨김에 다음 이벤트가 적용되지 않습니까?코드 숨김에서 불투명도 변경

void about_Click(object sender, RoutedEventArgs e) 
{ 
    // TopLevel.Opacity = 1.0, Splashscreen.Opacity = 0.0 
    TopLevel.Opacity = 0.1; 
    // still: TopLevel.Opacity = 1.0 
    Splashscreen.Opacity = 1.0; 
    // still: Splashscreen.Opacity = 0.0 
} 

불투명도 값은 변경되지 않습니다.

<Window.Triggers> 
    <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
     <BeginStoryboard Storyboard="{StaticResource splashscreenanimation}" /> 
    </EventTrigger> 
</Window.Triggers> 

나는 그것을 제거

코드 숨김 노력하고 있습니다 :

나는 다음과 같은 트리거 내 문제의 원인임을 발견했다.

<Window.Resources> 
    <Storyboard x:Key="splashscreenanimation"> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
             Storyboard.TargetName="Splashscreen" 
             BeginTime="0:0:0.900"> 
      <EasingDoubleKeyFrame KeyTime="0:0:1.5" 
            Value="0" /> 
     </DoubleAnimationUsingKeyFrames> 
     <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" 
             Storyboard.TargetName="TopLevel" 
             BeginTime="0:0:0.900"> 
      <EasingDoubleKeyFrame KeyTime="0:0:1.5" 
            Value="1" /> 
     </DoubleAnimationUsingKeyFrames> 
    </Storyboard> 
</Window.Resources> 

Solution : 완성도를 들어

이 애니메이션 당신이 첫번째 실행하여 애니메이션을 제거 할 수 있습니다 뒤에 코드에서 : Splashscreen.BeginAnimation(UserControl.OpacityProperty, null);
은 (스플래시 스크린은 UserControl을)입니다.
나는 또한 FillBehavior="HoldEnd" 또는 FillBehavior="Stop"을 스토리 보드에 추가하려고 시도했지만 제대로 작동하지 못했습니다.

+2

나는 당신의 마지막 코멘트에 동의하지 않을 것이다. 그것은 나를 위해 잘 작동한다. 아마도이 동작을 나타내는 XAML의 단순화 된 버전을 표시 할 수 있습니까? – Sheridan

답변

3

다시 한 번 종속성 속성 값 우선 순위와 동일한 문제가 발생합니다.

우선 순위를 살펴보십시오.

  1. 속성 시스템 강제 변환.

  2. 활성 동작 또는 보류 동작이있는 애니메이션. 실용적인 효과를 얻으려면 속성 값이 로컬로 설정된 경우에도 속성의 애니메이션이 기본 (일치없는) 값보다 우선 할 수 있어야합니다.

  3. 로컬 값. 로컬 값은 XAML에서 특성 또는 속성 요소로 설정하거나 특정 인스턴스의 속성을 사용하여 SetValue API를 호출하는 것과 동일한 "래퍼"속성의 편의를 통해 설정할 수 있습니다.

애니메이션이 대신됩니다.

여기 코드는 # 3입니다. 지역 값을 설정 중이지만 애니메이션은 여전히 ​​작동합니다.

void about_Click(object sender, RoutedEventArgs e) 
{ 
    // TopLevel.Opacity = 1.0, Splashscreen.Opacity = 0.0 
    TopLevel.Opacity = 0.1; 
    // still: TopLevel.Opacity = 1.0 
    Splashscreen.Opacity = 1.0; 
    // still: Splashscreen.Opacity = 0.0 
} 

우선 순위가 어떻게 작동하는지 이제 알게되기를 바랍니다. :) :) :)

관련 문제