ボタン用のExpression Blendでテンプレートを一緒にスローしました。問題なく上に移動してスペースバーを押すまでうまくいきます。WPF:Button ControlTemplate +スペースバー=例外?
InvalidOperationException '[不明]'プロパティは、パス '(0)。(0)。[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に合わせているようだ)と思われます。私はスペースバーを押したときにいずれかがなぜ発火するのかわからない...どんな提案?
EDIT:ライアン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が利用可能です。
私はまだ一つの他の事について好奇心が強い - これはみかんハック(例のように感じていることを考慮すると、これについて行くに最善の方法は何か:第3勾配停止が追加された/アニメーション、第三のGradientStop IsPressed == Trueのときに追加する必要があります)。提案のため
ありがとう!うまくいけば、これは他の人にも役立つでしょう。
私はPwninsteinの答えのために、それが期日になるとクレジットを与えるために、同様のブラシでバックグラウンドを交換しようとしました。他の方法もうまくいくかもしれませんが、これは私にとってはうまくいったのです –