0

このxamlコードを見てください:

       <Style x:Key="WowButton" TargetType="Button" >
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">                  
                <Setter Property="Width" Value="300"></Setter>
                <Setter Property="FontSize" Value="30"></Setter>
                <Setter Property="FontWeight" Value="Bold"></Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Background" Value="Yellow"></Setter>
                <Setter Property="Width" Value="150"></Setter>
                <Setter Property="FontSize" Value="25"></Setter>
            </Trigger>
            <EventTrigger RoutedEvent="Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Duration="0:0:0.25" Storyboard.TargetProperty="Width"
                                         From="300" To="500 ">                                
                        </DoubleAnimation>
                    </Storyboard>                        
                </BeginStoryboard>
            </EventTrigger>
            <EventTrigger RoutedEvent="MouseLeave">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation  Duration="0:0:2" Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
                                          From="0" To="360" RepeatBehavior="1x">                                
                        </DoubleAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
         </Style.Triggers>
    </Style>

メイン ウィンドウのボタンにこのスタイルを使用しました。ボタンを離れると回転して幅が狭くなりますが、クリックしても幅が元に戻りません。

4

2 に答える 2

0

Triggerの基本セッターとは異なり、 はそれらを削除するための自動呼び出しをStoryboard取得しません。RemoveStoryboard

したがって、それらが適用されなくなったときにそれらを取り除くのはあなた次第です。を使用していた場合は、 andをTrigger使用して の適用と削除を行うことができます。これは には存在しません。Trigger.EnterActionsTrigger.ExitActionsStoryboardEventTrigger

Storyboardあなたの場合、MouseLeaveイベントのクリックを削除するだけです。

のようなもの: ( 'sに ax:Nameを追加したことに注意してください)BeginStoryboard

<Style x:Key="WowButton"
        TargetType="Button">
  <Style.Triggers>
    <Trigger Property="IsMouseOver"
              Value="True">
      <Setter Property="Width"
              Value="300" />
      <Setter Property="FontSize"
              Value="30" />
      <Setter Property="FontWeight"
              Value="Bold" />
    </Trigger>
    <Trigger Property="IsMouseOver"
              Value="False">
      <Setter Property="Background"
              Value="Yellow" />
      <Setter Property="Width"
              Value="150" />
      <Setter Property="FontSize"
              Value="25" />
    </Trigger>
    <EventTrigger RoutedEvent="Click">
      <BeginStoryboard x:Name="clickStoryboard">
        <Storyboard>
          <DoubleAnimation Duration="0:0:0.25"
                            From="300"
                            Storyboard.TargetProperty="Width"
                            To="500 " />
        </Storyboard>
      </BeginStoryboard>
      <RemoveStoryboard BeginStoryboardName="leaveStoryboard" />
    </EventTrigger>
    <EventTrigger RoutedEvent="MouseLeave">
      <BeginStoryboard x:Name="leaveStoryboard">
        <Storyboard>
          <DoubleAnimation Duration="0:0:2"
                            From="0"
                            RepeatBehavior="1x"
                            Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
                            To="360" />
        </Storyboard>
      </BeginStoryboard>
      <RemoveStoryboard BeginStoryboardName="clickStoryboard" />
    </EventTrigger>
  </Style.Triggers>
</Style>

古いものを削除するために新しい を作成する必要はありません。em を取り除くには 's を適切にStoryboard使用してください。RemoveStoryboard

于 2013-05-25T10:40:59.250 に答える
0

MSDNから:

場合によっては、アニメーション後にプロパティの値を変更できないように見えることがあります。

newStoryboardsを changeWidthプロパティに追加することで、これを解決できます。

<Style x:Key="WowButton" TargetType="Button" >
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">                 
            <Setter Property="FontSize" Value="30"></Setter>
            <Setter Property="FontWeight" Value="Bold"></Setter>
        </Trigger>
        <Trigger Property="IsMouseOver" Value="False">
            <Setter Property="Background" Value="Yellow"></Setter>
            <Setter Property="Width" Value="150"></Setter>
            <Setter Property="FontSize" Value="25"></Setter>
        </Trigger>
        <EventTrigger RoutedEvent="Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Duration="0:0:0.25" Storyboard.TargetProperty="Width"
                                     From="300" To="500 ">                                
                    </DoubleAnimation>
                </Storyboard>                        
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="UIElement.MouseEnter">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Duration="0:0:0" Storyboard.TargetProperty="Width" From="150" To="300"/>
                 </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
        <EventTrigger RoutedEvent="MouseLeave">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation  Duration="0:0:2" Storyboard.TargetProperty="(Button.RenderTransform).(RotateTransform.Angle)"
                                      From="0" To="360" RepeatBehavior="1x">                                
                    </DoubleAnimation>
                    <DoubleAnimation Duration="0:0:0" Storyboard.TargetProperty="Width" From="300" To="150 "/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
     </Style.Triggers>
</Style>
于 2013-05-25T10:31:37.057 に答える