我有一个DockPanel和一个Button。我想在停靠面板中按事件(例如,鼠标悬停)设置按钮的动画(例如,淡入/淡出)。
修改
好吧,我发现解决方案仅适用于非模板/非模式情况(见下文)。如何以可重用的方式使用它?
<DockPanel>
<Button>
Name="aaa"
</Button>
<DockPanel.Triggers>
<EventTrigger RoutedEvent="DockPanel.MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.100"
To="1"
Storyboard.TargetName="aaa"
Storyboard.TargetProperty="Opacity"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="DockPanel.MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="0:0:0.100"
To="0"
Storyboard.TargetName="aaa"
Storyboard.TargetProperty="Opacity"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</DockPanel.Triggers>
</DockPanel>
答案 0 :(得分:1)
嗯,我唯一的想法就是将Controls
包裹在ContentControl
中。然后,您可能只需要为ContentControl
创建模板。
修改
ContentPresenter
=&gt; ContentControl
EDIT2
根据 TO 的编辑:
如果你想采用一种方法来处理事件,这是一种适当但恕我直言不太优雅的方法,你必须在视图后面的代码中实现这些方法。 e.g。
private void OnMouseOver(object sender, MouseEventArgs e)
{
var control = sender as Control; // perhaps you could cast to another base class
if (control == null)
return;
// implement the behavior you like
// ...
}
最大的问题,恕我直言的原因不那么优雅,你必须添加和删除每个Control
的方法,这个方法被添加到后面代码中的DockPanel。
如果您不熟悉模板,那么对您来说可能是更好的解决方案。