2013-10-14 155 views
0

我有兩個堆疊面板,其中第二個面板是額外的信息,可以滑下來並單擊按鈕時顯示(如jQuerys slideDown效果)。然後再次點擊按鈕時可以滑動。WPF可見性動畫觸發問題

我從來沒有擺弄過動畫,但一直在做一些研究。儘管我仍然很困惑,並且無法弄清楚這個簡單的問題。

當我只聽取Visibility = Visible屬性時,它工作正常。但是當我也想滑動面板時,它表現得很奇怪。

這是我的XAML代碼:

<Grid> 
       <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
        </Grid.RowDefinitions> 

        <StackPanel Grid.Row="0" Width="600" Orientation="Horizontal"> 
         <TextBlock Style="{StaticResource Heading4}">Panel 1</TextBlock> 
         <Button Width="300" Margin="30,0,0,0" Click="Button_OnClick">Click to slide other panel down</Button> 
        </StackPanel> 

        <StackPanel Name="StackPanelShowHide" Grid.Row="1" Width="500" Orientation="Vertical" Background="Beige" Height="70"> 
         <StackPanel.Style> 
          <Style TargetType="StackPanel"> 
           <Style.Triggers> 
            <Trigger Property="Visibility" Value="Visible"> 
             <Trigger.EnterActions> 
              <BeginStoryboard> 
               <Storyboard> 
                <DoubleAnimation Storyboard.TargetProperty="Height" From="0" To="70" Duration="0:0:1" /> 
               </Storyboard> 
              </BeginStoryboard> 
             </Trigger.EnterActions> 
            </Trigger> 
            <Trigger Property="Visibility" Value="Collapsed"> 
             <Trigger.EnterActions> 
              <BeginStoryboard> 
               <Storyboard> 
                <DoubleAnimation Storyboard.TargetProperty="Height" From="70" To="0" Duration="0:0:1" /> 
               </Storyboard> 
              </BeginStoryboard> 
             </Trigger.EnterActions> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </StackPanel.Style> 
         <TextBlock Style="{StaticResource Heading4}">New panel</TextBlock> 

        </StackPanel> 

       </Grid> 

這是我隱藏:

private void Button_OnClick(object Sender, RoutedEventArgs E) { 
     if (StackPanelShowHide.Visibility == Visibility.Collapsed) { 
      StackPanelShowHide.Visibility = Visibility.Visible; 
     } else { 
      StackPanelShowHide.Visibility = Visibility.Collapsed; 
     } 

    } 

真的希望你能幫助:)

親切的問候, 拉爾斯

回答

0

我想,而不是在崩潰上滑動動畫,它只是瞬間消失。這是因爲您將可見性設置爲摺疊狀態,所以不需要顯示任何內容。

要解決這個問題:

a)使用MVVM:它添加一些屬性視圖模型和觸發。通過ICommand修改屬性。

b)不要設置可視性,只需在事件處理程序中啓動適當的Storyboard即可。

+0

好的,我會試着去研究它。 – Farsen

0

我相信你的問題是當StackPanel有一個Visibility的值爲Collapsed,它從UI中刪除。因此,即使Animation發生,你也不會看到它。