2010-07-06 5 views
0

Button 용 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 값을 애니메이션으로 만들 수 있습니다. 이것은 크기에 관계없이 자동으로 조정될뿐만 아니라 특히 LayoutTransform 대신 RenderTransform으로 적용하는 경우 성능을 향상시킬 수 있습니다. 애니메이션 중에 일어날 것으로 예상되는 레이아웃에 대한 다른 변경 사항이있는 경우 LayoutTransform을 사용할 수는 있지만 레이아웃 측정 및 배열을 지속적으로 다시 계산해야하므로 느려질 것입니다.

+0

ScaleTransform을 사용하면 동일한 문제가 발생하지 않습니까? 단추의 내용에서 최대/최소 크기를 얻는 방법을 모르겠습니다. – TheSean

+0

아니요. 현재 레이아웃 단위에 애니메이션을 적용하려고합니다. ScaleTransform의 크기는 백분율로 표시되므로 전체 크기로 애니메이션을 적용하려면 To = "1"을 사용하십시오. –

관련 문제