You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF TextBox点击时全选内容失效问题求助

WPF TextBox点击(触摸)时全选内容的解决方案

问题说明

需实现WPF TextBox在鼠标点击(实际场景为触摸屏触摸)时自动全选所有内容,尝试多种方案(如OnGotFocus、OnGotKeyboardFocus)均无效,测试项目核心代码如下。

修复方案

修改ExtendedTextBox类的事件处理逻辑,核心是覆盖TextBox默认的光标定位行为,确保SelectAll操作生效。修正后的完整代码:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace CustomTextBox
{
    public class ExtendedTextBox : TextBox
    {
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.Key == Key.Enter) 
            {
                GetBindingExpression(TextProperty)?.UpdateSource();
            }
        }

        protected override void OnMouseDown(MouseButtonEventArgs e)
        {
            // 先获取焦点并全选,阻止默认光标定位行为
            if (!IsFocused)
            {
                Focus();
                e.Handled = true;
                SelectAll();
            }
            base.OnMouseDown(e);
        }

        // 兼容键盘获取焦点的场景,确保全选
        protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
        {
            base.OnGotKeyboardFocus(e);
            SelectAll();
        }
    }
}

原因解释

原方案失效的核心原因:

  • OnGotFocus执行后,TextBox默认的MouseDown事件会重新定位光标,覆盖全选状态
  • OnMouseUp触发时,默认光标定位已完成,此时调用SelectAll无法覆盖原有操作
  • 通过在OnMouseDown中标记事件为已处理(e.Handled = true),可阻断TextBox默认的光标定位逻辑,确保全选结果保留

内容的提问来源于stack exchange,提问作者Fedor Yudin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:32:23