我是 WPF 新手,对表单的行为有疑问。
我添加了一个按键事件来捕捉按下的返回键。
现在的问题是,没有视觉反馈。是否可以让按钮看起来像是被鼠标按下?
它应该看起来像我通过鼠标按下按钮,但是在按下返回之后。
我是 WPF 新手,对表单的行为有疑问。
我添加了一个按键事件来捕捉按下的返回键。
现在的问题是,没有视觉反馈。是否可以让按钮看起来像是被鼠标按下?
它应该看起来像我通过鼠标按下按钮,但是在按下返回之后。
也许解决方案将通过更改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 事件如何处理样式。
如果我理解,您想模拟按钮单击的视觉效果,那么,要实现这一点,您必须更改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 });