1

我是 WPF 新手,对表单的行为有疑问。

我添加了一个按键事件来捕捉按下的返回键。

现在的问题是,没有视觉反馈。是否可以让按钮看起来像是被鼠标按下?

它应该看起来像我通过鼠标按下按钮,但是在按下返回之后。

4

2 回答 2

2

也许解决方案将通过更改KeyPressed按钮的事件来解决。

请参阅此代码示例:

At first, create a button:

<ButtonContent="ButtonPressed" Name="buttonPressed" />

然后你应该添加Resources到你的 main.xaml 中,它将告诉按钮它的外观(如网页中的 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您在按钮上方时启动,并且如您所见,它再次使用这两种样式更改背景注意:将它们粘贴在 Button 样式之前:

<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>

这适用于 event IsMoseOver,但我认为 keypressed 是一样的。只看一点点;)

正如 Rachel 所说,您应该重写完整的模板,并告诉 Press 事件如何处理样式。

于 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 回答