单击时WPF可编辑ComboBox SelectAll

mar*_*man 6 c# wpf combobox wpf-controls

我点击TextBox时如何选择所有文本; 我想为可编辑的组合框做同样的事情 - 发现任何东西.我的TextBox代码是

private void OnPreviewMouseDown(Object sender, MouseButtonEventArgs e)
{
    txtBox.SelectAll();
    txtBox.Focus();
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

如何为可编辑组合框做同样的事情?

更新 Combox的代码,它为我提供了我想要的输出:

private void cboMouseDown(object sender, MouseButtonEventArgs e)
        {
            var textBox = (cbo.Template.FindName("PART_EditableTextBox", cbo) as TextBox);
            if (textBox != null)
            {
                textBox.SelectAll();
                cbo.Focus();
                e.Handled = true;
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是现在组合框的下拉不起作用,有什么建议吗?

Update-2:而不是PreviewMouseDown - 我尝试过PreviewMouseUp,现在显示下拉列表; 但是当一旦点击该框然后尝试打开下拉列表时 - 窗口就会冻结.但是,我已经做了一个工作,我已经在下面提出了我的答案.如果这是一个正确而安全的解决方案,我会非常感谢您的意见.

Nit*_*tin 6

使用GotFocus事件并选择这样的文本

    var comboTextBoxChild = comboBox.FindChild(typeof(TextBox), "PART_EditableTextBox") as TextBox;

    comboTextBoxChild .SelectAll();
Run Code Online (Sandbox Code Playgroud)

这里的combobox是你的可编辑组合名称


mar*_*man 5

我已经得到了一个可能的解决方案并且它对我有用 - 需要一些建议,但是否可以;我正在使用 ComboBox 的 PreviewMouseUp 事件:

private void cboMouseUp(object sender, MouseButtonEventArgs e)
        {
            var textBox = (cbo.Template.FindName("PART_EditableTextBox", cbo) as TextBox);
            if (textBox != null && !cbo.IsDropDownOpen)
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(()=>{
                    textBox.SelectAll();
                    textBox.Focus();
                    //e.Handled = true;
                }));
            }
Run Code Online (Sandbox Code Playgroud)