【问题标题】:WPF: Change Button Text when SHIFT is pressedWPF:按下 SHIFT 时更改按钮文本
【发布时间】:2020-06-05 11:33:50
【问题描述】:

我想在按下 SHIFT 键时更改按钮的文本(内容属性)。在这种情况下,按钮应执行不同的命令。这是一种常见的 UI 行为 e。 G。在 Photoshop 中。

任何想法如何做到这一点。

在此先感谢

【问题讨论】:

    标签: c# wpf keypress


    【解决方案1】:

    KeyDownPreviewKeyDown 事件添加到您的Button 元素。

    <Button Width="300" Height="50" Name="btnFunction" KeyDown="btnFunctionKeyDown" Content="Function1"/>
    

    还有 C# 代码:

    private void btnFunctionKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.LeftShift || e.Key == Key.RightShift)
        {
            btnFunction.Content = "Function2";
        }
    }
    

    查看这篇文章了解更多信息:

    https://docs.microsoft.com/de-de/dotnet/api/system.windows.input.keyboard.keydown?view=netcore-3.1

    【讨论】:

    • 非常感谢您的快速回复 - 该解决方案是否也适用于 Button 没有焦点?
    • 如果在 Button 没有焦点的情况下它应该可以工作,您必须将 PreviewKeyDown 事件添加到 Window 或 Grid 本身。如果您使用 PreviewKeyDown 事件,请确保添加 e.Handled = true。
    • 这仅在相关按钮具有焦点时才有效。如果其他东西具有焦点并且用户按下 shift 按钮然后单击 UI 按钮,它将不起作用。因此它不能解决 OP 提出的问题。
    • 这比假设的要复杂一些。首先,我需要在释放 shift 时重置按钮文本 - 好吧,我可以这样做,但使用 KeyUp 事件。但是,如果我将处理程序添加到窗口中,则 shift 键在案例窗口中的 TextBoxes 中不再起作用...
    【解决方案2】:

    这是我的解决方案(事件在窗口处理)-非常感谢您的输入-如果有更好的解决方案,请评论...

    internal void HandlePreviewKeyDown(KeyEventArgs e)
    {
        IInputElement focusedControl = FocusManager.GetFocusedElement(_window);
        if (( (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) && !(focusedControl?.GetType() == typeof(TextBox)))
        {
           // set button text
            e.Handled = true;
        }
    }
    
    internal void HandlePreviewKeyUp(KeyEventArgs e)
    {
        IInputElement focusedControl = FocusManager.GetFocusedElement(_window);
        if ( (e.Key == Key.LeftShift) || (e.Key == Key.RightShift) && !(focusedControl?.GetType() == typeof(TextBox)))
        {
             // re-set button text
             e.Handled = true;
        }  
    }
    

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 2017-12-28
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 2013-04-10
      相关资源
      最近更新 更多