【问题标题】:How to Simulate Button pressed visual in Forms?如何在表单中模拟按钮按下的视觉效果?
【发布时间】:2013-01-02 04:40:18
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c# wpf wpf-controls


【解决方案1】:

如果我理解,你想模拟一个按钮点击的视觉效果,所以,要实现这个,你必须改变按钮的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 });

【讨论】:

    【解决方案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 在您打开按钮时启动,并且如您所见,它再次更改背景,使用这两种样式注意:将它们粘贴在按钮样式之前:

    <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,但我认为按键按下时也是如此。只看一点点;)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      相关资源
      最近更新 更多