【问题标题】:WPF TextBox and preserving tabsWPF 文本框和保留选项卡
【发布时间】:2018-11-23 20:16:53
【问题描述】:

是否有一些优雅的方法可以允许粘贴到已将 AcceptsTab 设置为 false 的 WPF 文本框,同时保留粘贴文本中的选项卡?

当 AcceptsTab 为真时,用户不能使用选项卡移动到下一个控件,这是我的用户不希望的。但他们想要粘贴标签,目前已被空格替换。

谢谢

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    我不确定这是否称得上优雅,但它可以工作,但可能不像你想要的那样完整(例如,在文本框中右键单击并从上下文菜单中选择粘贴时)。

    Paste Event in a WPF TextBox

    在处理 Ctrl-V 之前将 AcceptsTab 设置为 true 并在之后恢复它:

    XAML:

    <TextBox AcceptsTab="False"
             Height="200" 
             PreviewKeyDown="TextBox_PreviewKeyDown" 
             KeyUp="TextBox_KeyUp"/>
    

    C#:

    private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (!(sender is TextBox textbox))
        {
            return;
        }
    
        if (e.Key == Key.V && (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)))
        {
            textbox.AcceptsTab = true;
        }
    }
    
    private void TextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (!(sender is TextBox textbox))
        {
            return;
        }
    
        textbox.AcceptsTab = false;
    }
    

    这可以变成一种行为,这样可以更容易地将其应用于更多的文本框,而无需在后面编写代码。

    【讨论】:

      【解决方案2】:

      另一种方法是将 AcceptsTab 设置为 true 并在按下 (Shift) Tab 时移动焦点。

      很好的副作用是所有复制/粘贴场景仍然可以使用,但用户将无法键入选项卡。

      private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
      {
          if (e.Key == Key.Tab)
          {
              var textBox = sender as TextBox;
              if (textBox != null)
              {
                  var direction =
                      e.KeyboardDevice.IsKeyDown(Key.LeftShift) || e.KeyboardDevice.IsKeyDown(Key.RightShift)
                          ? FocusNavigationDirection.Previous
                          : FocusNavigationDirection.Next;
                  textBox.MoveFocus(new TraversalRequest(direction));
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多