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

WPF中TextBox调用SelectAll()首次不生效仅第二次触发是什么原因

问题原因与修复方案

根因分析

  • 代码执行顺序错误:当前逻辑先执行SelectAll(),之后才给MyTextBox.Text赋值。第一次触发时SelectAll()执行时文本还未写入,后续的文本赋值操作会自动清空选中状态,因此第一次全选不生效。后续触发时TextBox已存在对应文本,相同文本覆盖不会清空选中状态,因此功能正常。
  • WPF界面渲染存在异步调度逻辑:刚修改控件可见性、调用Focus()后,控件状态还未完成渲染更新,直接调用SelectAll()可能因控件未就绪导致失效。

修复代码

调整代码执行顺序,先完成文本赋值,再通过Dispatcher调度全选逻辑,等界面完成当前渲染任务后再执行全选:

private void mniRename_Click(object sender, RoutedEventArgs e)
{
    prevSelected.MyTextBlock.Visibility = Visibility.Collapsed;
    prevSelected.MyTextBox.Visibility = Visibility.Visible;
    // 先完成文本赋值
    prevSelected.MyTextBox.Text = prevSelected.MyTextBlock.Text;
    prevSelected.MyTextBox.Focus();
    // 调度全选逻辑到UI渲染完成后执行
    Dispatcher.BeginInvoke(new Action(() =>
    {
        prevSelected.MyTextBox.SelectAll();
    }), System.Windows.Threading.DispatcherPriority.Input);
}

MouseLeftButtonDown事件中的重命名逻辑也按上述规则调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:09:02