2010-07-06 45 views
0

我正在爲按鈕創建一個ControlTemplate。我想動畫大小,以便鼠標懸停在其上時適合內容。不過,我不確定如何獲取觸發器部分的內容大小。這是我的。如何在按鈕模板觸發器中使用內容大小?

<ControlTemplate x:Key="buttonTemplate" TargetType="Button"> 
<Grid Name="grid" Height="12" Width="12" Opacity="0.4"> 
<ContentPresenter Name="content" ... /> 
</Grid> 

<ControlTemplate.Triggers> 
    <EventTrigger RoutedEvent="MouseEnter"> 
     <BeginStoryboard> 
      <Storyboard> 
     <DoubleAnimation 
      Storyboard.TargetName="grid" 
      Storyboard.TargetProperty="Width" 
      To="40"       
      Duration="0:0:0.4"/>  
     <DoubleAnimation 
      Storyboard.TargetName="grid" 
       Storyboard.TargetProperty="Height" 
      To="20"       
      Duration="0:0:0.4"/>  
     </Storyboard> 
    </BeginStoryboard> 
    </EventTrigger> 

    <EventTrigger RoutedEvent="MouseLeave"> 
    <BeginStoryboard> 
     <Storyboard> 
      <DoubleAnimation 
      Storyboard.TargetName="grid" 
      Storyboard.TargetProperty="Width" 
      Duration="0:0:0.2"/>  
     <DoubleAnimation 
      Storyboard.TargetName="grid" 
      Storyboard.TargetProperty="Height" 
      Duration="0:0:0.2"/>       
     </Storyboard> 
    </BeginStoryboard> 
    </EventTrigger> 

</ControlTemplate.Triggers> 
</ControlTemplate> 

我已經在發生在觸發To="40"使用TemplateBinding試過,但引起的異常。我如何在觸發器中使用動態值?

回答

0

您可以將ScaleTransform應用到網格併爲其ScaleX和ScaleY值設置動畫效果,而不是直接爲佈局大小設置動畫。這不僅可以自動調整大小,而且可以提供更好的性能,特別是如果將其應用爲RenderTransform而不是LayoutTransform。如果在動畫期間預計會發生布局的其他更改,則可以使用LayoutTransform,但由於需要不斷重新計算佈局測量和佈局,因此速度會變慢。

+0

如果我使用ScaleTransform,我不會有同樣的問題嗎?我不知道如何從Button的內容中獲取最大/最小大小。 – TheSean 2010-07-08 12:30:37

+0

不可以。您目前正在嘗試製作佈局單位的動畫。 Scale按百分比轉換大小以便動畫到全尺寸使用To =「1」。 – 2010-07-08 13:33:34

相關問題