如何解决在ControlTemplate的触发器中,如何访问在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
?解决方法
您无法按名称访问它,因为
ScaleTransform
不是视觉树中的元素,它只是元素属性的值(Grid
)。
相反,您可以做的是通过定义转换的父元素访问转换的属性。例如:
<DoubleAnimation Storyboard.TargetName=\"Grid\" Storyboard.TargetProperty=\"RenderTransform.(ScaleTransform.ScaleX)\" .../>
,我认为问题是ScaleTransform不是视觉元素。因此无法在VisualTree中找到它。您应该尝试在网格上设置触发器并更改整个ScaleTransform。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。