簡體   English   中英

如何通過父控件中的事件為子控件設置動畫? -可重復使用的方式

[英]How to animate child control by event in the parent control? - Reusable way

我里面有一個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>

嗯,我唯一的想法是將要顯示的Controls包裝在ContentControl 然后,您可能僅需要為ContentControl創建模板。

編輯

ContentPresenter => ContentControl

EDIT2

根據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
  // ...
}

最大的問題,恕我直言,其原因是不夠優雅,您必須在添加到DockPanel中的每個Control添加和刪​​除方法。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM