繁体   English   中英

如何在Forms中模拟Button按下的视觉效果?

[英]How to Simulate Button pressed visual in Forms?

我是WPF的新手,并且对表格中的行为有疑问。

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

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

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

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

看到这个代码示例:

At first, create a button:

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

然后你应该向你的main.xaml添加一个Resources ,告诉按钮它的外观(比如网页中的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启动,正如你所看到的,它会再次改变背景,使用这两种样式注意:在按钮样式之前粘贴它们:

<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 ,但我认为它与IsMoseOver相同。 只看一点;)

正如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 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM