-1

マウスが境界線に入ったときのボタンの影の効果の色をアニメーション化したい。私はこのコードを試しましたが、うまくいきません。そして、私は問題がどこにあるのかわかりませんか?

    <Style x:Name="HeaderButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Border x:Name="Border" BorderBrush="#FF550211" BorderThickness="0" CornerRadius="4">
                    <Border.Triggers>
                        <EventTrigger RoutedEvent="Border.MouseEnter">
                            <BeginStoryboard>
                                <Storyboard>
                                    <ColorAnimation Storyboard.TargetProperty="Color" Storyboard.TargetName="MenuButtonShadow"
                                                    From="#FFFFFFFF" To="#FF000000" Duration="0:0:0.3"></ColorAnimation>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger>
                    </Border.Triggers>
                    <Border.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FFAF1232" Offset="0" />
                            <GradientStop Color="#FFB60329" Offset="1" />
                        </LinearGradientBrush>
                    </Border.Background>
                    <ContentPresenter Margin="8, 0" VerticalAlignment="Center" HorizontalAlignment="Center" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect x:Name="MenuButtonShadow" ShadowDepth="0" BlurRadius="4"></DropShadowEffect>
        </Setter.Value>
    </Setter>
    <Setter Property="Foreground" Value="White"></Setter>
    <Setter Property="Margin" Value="4"></Setter>
</Style>
4

1 に答える 1

1

MSDNから:

Silverlightでは、EventTriggerに使用できるイベントはLoadedイベントのみです。その他のイベントの場合は、Resourcesプロパティでストーリーボードを宣言し、ストーリーボードのName値を指定して、名前付きストーリーボードでBeginメソッドを呼び出すイベントハンドラーを作成する必要があります。

XAMLでこのようなことを実行できると思います(テストはしていませんが)。

<Storyboard x:Name="MenuButtonShadowStoryboard">
    <ColorAnimation Storyboard.TargetProperty="Color" Storyboard.TargetName="MenuButtonShadow"
                    From="#FFFFFFFF" To="#FF000000" Duration="0:0:0.3">
    </ColorAnimation>
</Storyboard>

<ControlTemplate TargetType="Button">
    <Border x:Name="Border" MouseEnter="Border_MouseEnter">
        <!-- omitted for brevity -->
    </Border>
</ControlTemplate>

次に、イベントハンドラーがストーリーボードのBeginメソッドを呼び出します。

private void Border_MouseEnter(object sender, MouseEventArgs e)
{
    MenuButtonShadowStoryboard.Begin();
}

MouseLeaveイベントに似たようなものを追加すると、色が#FFFFFFFFに戻ります。

于 2012-09-06T22:38:56.677 に答える