私はWPFを初めて使用し、フォームの動作について質問があります。
押されたリターンキーをキャッチするためにキーダウンイベントを追加しました。
問題は、視覚的なフィードバックがないことです。ボタンをマウスで押したように見せることはできますか?
マウスでボタンを押したように見えますが、代わりにReturnキーを押した後です。
私はWPFを初めて使用し、フォームの動作について質問があります。
押されたリターンキーをキャッチするためにキーダウンイベントを追加しました。
問題は、視覚的なフィードバックがないことです。ボタンをマウスで押したように見せることはできますか?
マウスでボタンを押したように見えますが、代わりにReturnキーを押した後です。
たぶん、解決策はKeyPressed
ボタンのイベントを変更することによって行くでしょう。
次のコード例を参照してください。
At first, create a button:
<ButtonContent="ButtonPressed" Name="buttonPressed" />
次にResources
、ボタンがどのように表示されるかを示すmain.xamlに追加する必要があります(WebページのCSSのように)。
<Window.Resources>
<Style TargetType="Button">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="{StaticResource GlowFX}" />
<Setter Property="Width" Value="150" />
<Setter Property="Height" Value="35" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource GlowFXPressed}" />
</Trigger>
</Style.Triggers>
</Style>
プロパティを使用Background
して、ボタンのデフォルトの背景を変更します。ボタンのTrigger
上にいるときに起動します。ご覧のとおり、次の2つのスタイルで背景が再び変化します。注:ボタンスタイルの前に貼り付けてください。
<RadialGradientBrush x:Key="GlowFX" GradientOrigin=".5,1" Center=".5,1">
<GradientStop Offset="0" Color="#990000FF"></GradientStop>
<GradientStop Offset=".3" Color="#660000DD"></GradientStop>
<GradientStop Offset="1" Color="#33000000"></GradientStop>
</RadialGradientBrush>
<RadialGradientBrush x:Key="GlowFXPressed" GradientOrigin=".5,1" Center=".5,1">
<GradientStop Offset="0" Color="#990000FF"></GradientStop>
<GradientStop Offset=".3" Color="#880000DD"></GradientStop>
<GradientStop Offset="1" Color="#33000000"></GradientStop>
</RadialGradientBrush>
これはイベントIsMoseOver
で機能しますが、キーが押された場合も同じだと思います。少しだけ見てください;)
レイチェルが言うように、完全なテンプレートを書き直して、プレスイベントにスタイルをどうするかを伝える必要があります。
私が理解している場合、ボタンクリックの視覚効果をシミュレートしたいので、これを実現するにIsPressed
は、ボタンのプロパティを変更する必要がありますが、読み取り専用であるため、次のようになりますSystem.Reflection
。
KeyDown
イベントで:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(btnSimulate, new object[] { true });
およびKeyUp
:
typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(btnSimulate, new object[] { false });