我有以下的(简化)控件模板:在ControlTemplate的触发器中,如何访问ControlTemplate正文中定义的元素?
<ControlTemplate x:Key="ImageButtonTemplate" TargetType="{x:Type controls:ImageButton}">
<Grid x:Name="Grid">
<Border [StuffRemoved]/>
<StackPanel [StuffRemoved]>
<Image [StuffRemoved] />
<ContentPresenter [StuffRemoved] />
</StackPanel>
<Grid.RenderTransform>
<ScaleTransform x:Name="ImgBtnScale"/>
</Grid.RenderTransform>
</Grid>
<ControlTemplate.Triggers>
<!-- problem here! -->
<Trigger Property="IsPressed" Value="True">
<Trigger.Setters>
<Setter TargetName="ImgBtnScale" Property="ScaleX" Value="0.9"/>
<Setter TargetName="ImgBtnScale" Property="ScaleY" Value="0.9"/>
</Trigger.Setters>
</Trigger>
<!-- rest of the stuff works okay-->
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ImgBtnScale" Storyboard.TargetProperty="ScaleX"
To="1.2" Duration="0:0:0.1"/>
<DoubleAnimation Storyboard.TargetName="ImgBtnScale" Storyboard.TargetProperty="ScaleY"
To="1.2" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="ImgBtnScale" Storyboard.TargetProperty="ScaleX"
To="1" Duration="0:0:0.1"/>
<DoubleAnimation Storyboard.TargetName="ImgBtnScale" Storyboard.TargetProperty="ScaleY"
To="1" Duration="0:0:0.1"/>
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
它不会编译,说:
Cannot find the target 'ImgBtnScale'. (The target must appear before any Setters, Triggers or Conditions that use it.)
那么,如何访问ImgBtnScale
?
括号内的语法不起作用,但它确实似乎是在这里使用Storyboard。顺便说一句,我通过使用VisualStateManager而不是触发器来更好地完成我的最终目标。无论如何,+1的视觉树提示。 – ForeverLearnNeverMaster 2011-04-19 13:11:56