我正在尝试为 ContentTemplate 内的一个控件设置事件触发器,当我将 Storyboard TargetName 设置为“ContentPopup”时,我正在使用 Storyboard和与 DoubleAnimationUsingKeyFrames 嵌套的 DoubleAnimation “这是我在下面保存的网格,但我收到一个错误告诉我:
名称“ContentPopup”不在命名空间“System.Windows.Controls.Grid”中。
控件模板上的动画代码为:
<Grid Margin="0" Width="55" Height="40">
<Grid.Triggers>
<EventTrigger RoutedEvent="m:Pushpin.MouseDown">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="00:00:00.5000000" Storyboard.TargetName="ContentPopup" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)" To="1">
...
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Grid.Triggers>
...
</Grid>
我需要设置动画的网格上的代码是:
<Grid Name="ContentPopup"
Background="White"
Opacity="0.85"
RenderTransformOrigin="0,0">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0" ScaleY="0"/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
...
</Grid>
MSDN 表示,需要执行以下操作才能使对象可定位
网格是一个 FrameworkElement,我希望动画在我使用此控件模板在主窗口上调用的每个控件上运行,它们很多,所以我需要使用该模板。 问题是:
有没有办法将元素指定为模板中的目标?
最佳答案
所以我找到了正确的方法来做到这一点,即使网格是一个FrameworkElement,你也无法从控件模板访问它,所以你需要在中提供一些绑定(bind)或XAML引用为了工作,所以使用相同的代码,而不是使用带有值的 Storyboard.Target 的 Storyboard.TargetName 属性:
Storyboard.Target="{Binding ElementName=ContentPopup}"
或者也:
Storyboard.Target="{x:Reference Name=ContentPopup}"
这对我有用
关于c# - 将元素指定为控件模板中的动画目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21531680/