2

我里面有一个 DockPanel 和一个按钮。我想在停靠面板中按事件(例如,鼠标悬停)为按钮设置动画(例如,淡入/淡出)。

编辑

好吧,我发现解决方案仅适用于非模板/非样式案例(见下文)。如何把它带到可重用的方式?

<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>
4

1 回答 1

1

嗯,我唯一的想法是将Controls你想要显示的内容包装在ContentControl. 那么您可能只需要为ContentControl.

编辑

ContentPresenter=>ContentControl

编辑2

根据TO的编辑:

如果您想采用事件方法,这是一种正确但恕我直言不太优雅的方法,您必须在视图后面的代码中实现这些方法。例如

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 的方法。

如果您不熟悉模板,它可能是您更好的解决方案。

于 2013-02-11T09:48:42.627 回答