2014-11-18 4 views
2

WinRT에서 많은 애니메이션이 중간 값을 표시하지 않거나 마우스를 움직이거나 다른 시스템 이벤트가 발생하면 이상하게 표시합니다. 애니메이션이 끝나면 값은 올바르게 설정되지만 실행하는 동안 (내 경우에는 애니메이션의 2 초 길이) 중간 값은 표시되지 않습니다.WinRT 애니메이션에 중간 값이 표시되지 않음

2 초 후에 창이 사라지지만 X 키를 누를 때 튀어 나오지 않는 경우가 있습니다. 일부는 애니메이션 중에 마우스를 움직이면 볼 수 있지만 일반적으로 XAML 그래프가 더 복잡한 경우에만 발생합니다 .

<Grid Background="#525252"> 
 
     <Grid x:Name="AnimatedDialog" 
 
       HorizontalAlignment="Center" 
 
       VerticalAlignment="Center"> 
 
      <Grid.Projection> 
 
       <PlaneProjection /> 
 
      </Grid.Projection> 
 
      <Grid.RowDefinitions> 
 
       <RowDefinition Height="Auto" /> 
 
       <RowDefinition /> 
 
      </Grid.RowDefinitions> 
 
      <Grid.ColumnDefinitions> 
 
       <ColumnDefinition /> 
 
       <ColumnDefinition Width="Auto" /> 
 
      </Grid.ColumnDefinitions> 
 

 
      <Border Grid.RowSpan="2" 
 
        Grid.ColumnSpan="2" 
 
        Background="White" 
 
        BorderBrush="#2E2E2E" 
 
        BorderThickness="1" /> 
 

 
      <Border Background="#2E2E2E" /> 
 
      <TextBlock Grid.Row="0" 
 
         Grid.Column="0" 
 
         Margin="10,5" 
 
         HorizontalAlignment="Left" 
 
         VerticalAlignment="Center" 
 
         FontFamily="Segoe UI" 
 
         FontSize="20" 
 
         FontWeight="SemiBold" 
 
         Text="{Binding Title, 
 
             ElementName=Root, 
 
             FallbackValue='This is the title'}" /> 
 
      <Border Grid.Row="0" 
 
        Grid.Column="1" 
 
        Width="40" 
 
        Height="40" 
 
        HorizontalAlignment="Right" 
 
        VerticalAlignment="Top" 
 
        Background="#BD0000" 
 
        BorderThickness="0" 
 
        Padding="0" 
 
        PointerReleased="CloseBorder_OnPointerReleased" /> 
 
      <TextBlock Grid.Row="0" 
 
         Grid.Column="1" 
 
         HorizontalAlignment="Center" 
 
         VerticalAlignment="Center" 
 
         FontFamily="Segoe UI Symbol" 
 
         FontSize="22" 
 
         Foreground="White" 
 
         IsHitTestVisible="False" 
 
         Text="❌" /> 
 

 
      <TextBlock Grid.Row="1" 
 
         Grid.Column="0" 
 
         Grid.ColumnSpan="2" 
 
         Width="550" 
 
         Height="360" 
 
         Margin="10" 
 
         FontSize="22" 
 
         Foreground="Black" 
 
         IsHitTestVisible="False" 
 
         Text="Bacon ipsum dolor amet boudin ground round drumstick porchetta prosciutto spare ribs short ribs bresaola leberkas hamburger sirloin shank tri-tip turkey strip steak. Rump boudin shank, ham hock bresaola shankle shoulder. Alcatra landjaeger kevin tail hamburger turducken flank pork. Meatloaf turducken leberkas, pig sausage pancetta ground round. Beef kevin swine tongue ham hock bacon shoulder leberkas kielbasa rump capicola ribeye chicken shankle venison. Biltong ball tip prosciutto, t-bone cow pork ribeye pancetta strip steak jowl ham drumstick landjaeger short ribs andouille. Turducken tail shankle bacon, pork turkey filet mignon ham pig." 
 
         TextWrapping="WrapWholeWords" /> 
 
     </Grid> 
 
    </Grid>

그리고 뒤에 코드 :

 private void CloseBorder_OnPointerReleased(object sender, PointerRoutedEventArgs e) 
     { 
      // Spin AnimatedDialog to close. 

      var storyboard = new Storyboard(); 

      var projection = AnimatedDialog.Projection as PlaneProjection; 
      projection.CenterOfRotationY = 0.5; 

      var flipAnim = new DoubleAnimation(); 

      Storyboard.SetTarget(flipAnim, projection); 
      Storyboard.SetTargetProperty(flipAnim, "RotationX"); 

      // 2 second flip 
      flipAnim.Duration = new Duration(new TimeSpan(0, 0, 2)); 
      flipAnim.EasingFunction = new QuadraticEase {EasingMode = EasingMode.EaseIn}; 
      flipAnim.From = 0; 
      flipAnim.To = 90; 

      storyboard.Children.Add(flipAnim); 

      storyboard.Completed += StoryboardOnCompleted; 

      storyboard.Begin(); 
     } 

     private void StoryboardOnCompleted(object sender, object o) 
     { 
      Debug.WriteLine("Completed storyboard."); 
     } 

답변

2

0에 가까운 값을 사용하지만 실제로는 0이 아닌 값을 사용하면 어떤 이유로 작동합니다.

 private void CloseBorder_OnPointerReleased(object sender, PointerRoutedEventArgs e) 
     { 
      // Spin AnimatedDialog to close. 

      var storyboard = new Storyboard(); 

      var projection = AnimatedDialog.Projection as PlaneProjection; 
      projection.CenterOfRotationY = 0.5; 
      projection.RotationX = .0000000001; // <--- this line changed 

      var flipAnim = new DoubleAnimation(); 

      Storyboard.SetTarget(flipAnim, projection); 
      Storyboard.SetTargetProperty(flipAnim, "RotationX"); 

      // 2 second flip 
      flipAnim.Duration = new Duration(new TimeSpan(0, 0, 2)); 
      flipAnim.EasingFunction = new QuadraticEase { EasingMode = EasingMode.EaseIn }; 
      flipAnim.From = projection.RotationX; // <--- this line changed 
      flipAnim.To = 90; 

      storyboard.Children.Add(flipAnim); 

      storyboard.Completed += StoryboardOnCompleted; 

      storyboard.Begin(); 
     } 

     private void StoryboardOnCompleted(object sender, object o) 
     { 
      Debug.WriteLine("Completed storyboard."); 
     } 
+0

나를 위해 그 라인을 추가해도 아무런 효과가 없습니다. 나는 당신이 마우스를 움직이고 있다고 생각한다. (원래의 질문을 더 자세히 읽는다.) X를 클릭 한 후에 마우스를 계속 움직여 볼 수 있습니까? 몇 번 시도해보고 무슨 일이 일어나는지 알려주세요. –

+0

나는 마우스를 움직이지 않을 것이다. 나는 당신이 물었던 것과 똑같이 움직였습니다. 그러나 구현시 2 개의 라인이 변경되었으며 마우스를 움직이지 않고도 100 %의 시간이 걸렸습니다. 변경된 내용을 보려면 코드의 주석을 확인하십시오. – Laith

+0

두 줄을 실제로 바꿨지 만 마우스를 움직일 때만 작동합니다. 클릭하는 동안 마우스를 계속 움직이고 있다고 확신합니까? –

0

flipAnim.EnableDependentAnimation = true;를 추가하고 작동합니다

다음은 XAML입니다.

+0

미안합니다. 나는 의존적 인 애니메이션을 알고 있으며 이것은 하나가 아닙니다. –

+0

코드로 새 프로젝트를 만들었고 EnableDependentAnimation을 추가하자마자 대화 상자가 뒤집혔습니다. – Dani

+0

마우스를 움직이면 실제로 뒤집을 수 있습니다. 다른 시스템 이벤트도 애니메이션을 시작하는 것처럼 보입니다. 그것은 원래 질문의 일부입니다. X를 클릭 한 후 마우스를 움직이지 마십시오. 몇 번 해보신 후 결과를 알려주십시오. 감사! –

관련 문제