1

Expression Blend でボタン用のテンプレートを作成しました。タブで移動してスペースバーを押すまでは問題なく動作します。次のエラーが表示されます。

InvalidOperationException '[不明]' プロパティがパス '(0).(1).[0].(2)' の DependencyObject を指していません。

コードは次のとおりです。

    <ControlTemplate x:Key="EmailButton" TargetType="{x:Type Button}">
        <ControlTemplate.Resources>
            <Storyboard x:Key="MouseOverStoryboard">
                <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
                    <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#FF55679E"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
            <Storyboard x:Key="UnMouseOverStoryboard">
                <ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="border" Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
                    <SplineColorKeyFrame KeyTime="00:00:00.4000000" Value="#FF92A2D3"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </ControlTemplate.Resources>
        <Border x:Name="border" BorderBrush="#FF000000" BorderThickness="2,2,2,2" CornerRadius="4,4,4,4">
            <Border.Background>
                <LinearGradientBrush EndPoint="0.47,-0.01" StartPoint="0.47,0.808">
                    <GradientStop Color="#FF92A2D3" Offset="0"/>
                    <GradientStop Color="#FFFFFFFF" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="{TemplateBinding Padding}"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" TargetName="border" Value="#FF92A2D3"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Trigger.EnterActions>
                    <BeginStoryboard x:Name="MouseOverStoryboard_BeginStoryboard" Storyboard="{StaticResource MouseOverStoryboard}"/>
                </Trigger.EnterActions>
                <Trigger.ExitActions>
                    <BeginStoryboard x:Name="UnMouseOverStoryboard_BeginStoryboard" Storyboard="{StaticResource UnMouseOverStoryboard}"/>
                </Trigger.ExitActions>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

MouseOverStoryboard または UnMouseOverStoryboard が発生しているように見えます (エラーに記載されているパスは TargetProperty と一致しているようです)。ただし、スペースバーを押すとどちらかが起動する理由はわかりません...何か提案はありますか?

編集: Ryan Versaw のおかげで、次のことを試しました。これにより、スペースバーのクリックで例外がスローされなくなりました。

            <Trigger Property="IsPressed" Value="True">
                <Setter Property="Background" TargetName="border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FF92A2D3" Offset="0"/>
                            <GradientStop Color="#FF92A2D3" Offset="1"/>
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>

ブラシ タイプは一貫したまま (LinearGradientBrush) になり、常に 0 番目の GradientStop が利用可能になりました。

私はまだもう1つのことに興味があります-これを行うための最良の方法は何ですか? ==真)。

提案をありがとう!うまくいけば、これは他の誰かにも役立つでしょう。

4

3 に答える 3

1

最適なソリューションが何であるかはわかりませんが、機能するソリューションを見つけました。

リソースにを作成LinearGradientBrushします。

<LinearGradientBrush x:Key="solidBrush">
    <GradientStop Color="#FF92A2D3"/>
</LinearGradientBrush>

IsPressedトリガーを次のように変更します(Value変更のみ)。

<Trigger Property="IsPressed" Value="True">
    <Setter Property="Background" TargetName="border" Value="{StaticResource solidBrush}"/>
</Trigger>

これにより、バックグラウンド全体が新しいものと交換されます(これもLinearGradientBrush)。

于 2009-05-19T19:00:14.203 に答える
1

スペースバーを押すと、ボタンをクリックするのと同じです。トリガー
を見ればいいIsPressed

于 2009-05-19T18:22:52.627 に答える