1

私はWPFを初めて使用し、フォームの動作について質問があります。

押されたリターンキーをキャッチするためにキーダウンイベントを追加しました。

問題は、視覚的なフィードバックがないことです。ボタンをマウスで押したように見せることはできますか?

マウスでボタンを押したように見えますが、代わりにReturnキーを押した後です。

4

2 に答える 2

2

たぶん、解決策は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で機能しますが、キーが押された場合も同じだと思います。少しだけ見てください;)

レイチェルが言うように、完全なテンプレートを書き直して、プレスイベントにスタイルをどうするかを伝える必要があります。

于 2013-01-18T13:09:07.597 に答える
2

私が理解している場合、ボタンクリックの視覚効果をシミュレートしたいので、これを実現するに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 });
于 2013-01-18T13:25:33.327 に答える