2011-10-07 27 views
6

Tôi có một stackpanel với một nút mà, khi nhấp vào, làm cho stackpanel biến mất. Tôi muốn tạo hiệu ứng cho hình thức chuyển đổi có thể nhìn thấy ẩn, nhưng không thể.WPF stackpanel visibilty hoạt hình

Tôi nhìn xung quanh một lúc và đâm sầm vào cái gì đó trông như thế này:

<StackPanel Margin="80,60,60,80" Background="Gray"> 
      <StackPanel.Triggers > 

       <EventTrigger > 
        <EventTrigger.Actions> 
         <BeginStoryboard> 
          <Storyboard TargetProperty="Visibility"> 

           <DoubleAnimation Duration="0:0:5:0" From="Visible" To="Hidden"/> 

          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger.Actions> 
       </EventTrigger> 

      </StackPanel.Triggers> 
      <Button Name="buttonTop" Content="TOP" Margin="40,40,40,40" Click="buttonTop_Click" Width="131" /> 
     </StackPanel> 

trong đó tất nhiên, không phải là 100% có được nêu ra. Bất kỳ ý tưởng?

thanx

Trả lời

10

Bạn có thể sử dụng

<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ItemsHost" 
           Storyboard.TargetProperty="Visibility"> 
    <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/> 
</ObjectAnimationUsingKeyFrames> 

này là khá nhiều một setter trong một kịch bản, nơi KeyTime mô tả thời gian khi giá trị nên được thiết lập. Vì vậy, toàn bộ kịch bản sẽ là như thế này:

<BeginStoryboard> 
    <Storyboard> 
     <DoubleAnimation Storyboard.TargetProperty="Opacity" 
         To="0" Duration="0:0:5.0"/> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"> 
      <DiscreteObjectKeyFrame KeyTime="0:0:5.0" Value="{x:Static Visibility.Hidden}"/> 
     </ObjectAnimationUsingKeyFrames> 
    </Storyboard> 
</BeginStoryboard> 

chỉnh sửa: Làm thế nào để làm cho kích hoạt storyboard khi button được click:

<Button Content="Button" HorizontalAlignment="Left" Margin="337,221,0,0" VerticalAlignment="Top" Width="75"> 
    <Button.Triggers> 
     <EventTrigger RoutedEvent="Button.Click"> 
      <BeginStoryboard> 
       <Storyboard> 
        <DoubleAnimation Storyboard.TargetProperty="Opacity" 
       To="0" Duration="0:0:5.0"/> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility"> 
         <DiscreteObjectKeyFrame KeyTime="0:0:5.0" Value="{x:Static Visibility.Hidden}"/> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Button.Triggers> 
</Button> 
+0

Cảm ơn câu trả lời chi tiết. Nó hoạt động tốt. Làm thế nào để tôi đặt nó để nó kích hoạt khi tôi nhấp vào nút? – hikizume

+0

Tôi đã chỉnh sửa nó. – AkselK

+0

Tuyệt vời. Cảm ơn rất nhiều! – hikizume

4

Visibiltiy là một giá trị rời rạc - đó là một trong hai hoặc tắt, vì vậy sinh động vẫn sẽ dẫn đến một sự biến mất đột ngột chứ không phải là dần dần mờ dần ra. Thay vào đó, bạn có thể tạo ảnh động Opacity của số StackPanel từ 1 đến 0 và sau đó tạo ảnh động Visibilty thành Hidden (hoặc Collapsed) sau đó.

+1

Tôi hiểu ý tưởng nhưng vì tôi rất mới để WPF tôi thiếu kiến ​​thức để dịch ý tưởng thành mã. Một câu trả lời chi tiết hơn sẽ được đánh giá cao. – hikizume

Các vấn đề liên quan