2009-08-14 75 views
4

我想在圖像上通過動畫設置其高度屬性來擴展和契約ItemsSource。WPF動畫展開合同高度

我有一個通用的ItemsSource綁定到一個ObservableCollection,所以我不知道這個控件的總高度。

一旦圖像被點擊,它應該改變它的圖像源字形來顯示itemssource被展開。一旦它再次被點擊,ItemsSource應該開始從當前的高度縮回到0--因爲第一個動畫可能沒有完成。

目前,我有以下的圖像觸發:

<Image Name="ExpandImage" Source="ArrowDown.png"> 
      <Image.Triggers> 
       <EventTrigger RoutedEvent="Image.MouseLeftButtonDown"> 
        <EventTrigger.Actions> 
         <BeginStoryboard> 
          <Storyboard> 
           <DoubleAnimation Storyboard.TargetProperty="Height"              
              Storyboard.TargetName="myItemsControl" 
              From="0" To="300" Duration="0:0:2" /> 
          </Storyboard> 
         </BeginStoryboard> 
        </EventTrigger.Actions> 
       </EventTrigger> 
      </Image.Triggers> 
     </Image> 

這是醜陋的,因爲它會以動畫方式固定高度 - 我需要它的動畫總(未知的高度)的ItemsControl的。此外,它只支持單向(擴展)動畫。

我的ItemsControl很簡單:

<ItemsControl Name="myItemsControl" 
     ItemsSource="{Binding Items}" Height="0" > 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <c:CustomUserControl/> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 

回答

1

你可以得到項目的實際高度與......嗯,的ActualHeight樓市調控。問題是它不是依賴項屬性。但是,您可以使用像Kent Boogaart在this answer中所做的附加行爲綁定到它。

這應該讓你綁定到實際的高度。我會留給你寫下附加的行爲。 :)