2

内部に 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>
4

1 に答える 1

1

うーん、私が持っている唯一のアイデアは、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
  // ...
}

最大の問題、および IMHO がエレガントではない理由はControl、コード ビハインドで DockPanel に追加されるメソッドをそれぞれに追加および削除する必要があることです。

テンプレートに慣れていない場合は、それがより良い解決策かもしれません。

于 2013-02-11T09:48:42.627 に答える