如何将闪烁的光标设置为 WPF 可编辑组合框?
How to set the blinking cursor to WPF Editable ComboBox?
在我的 WPF 程序中,我有一个标准的组合框(可编辑)。我希望的行为是在 FormLoad
时,我希望用户能够从列表中输入 ComboBox
和 select。 (在 FormLoad
处,我已经用一些字符串填充了它。)所以我设置了 comboBox.Focus()
,因为我有 IsTextSearchEnabled="True"
,这是默认行为,所以它工作正常。
我的问题是,当设置comboBox.Focus()
时,它确实聚焦了控件,但我没有在其中看到闪烁的光标。这是它的样子:
这在理论上可以完成工作,但我认为它不是很用户友好。我希望 ComboBox 具有焦点,并且还有闪烁的光标。
当我点击可编辑的 ComboBox 时,我得到了闪烁的光标,所以我查看了当我这样做时触发了什么事件。结果是 PreviewMouseLeftButtonDown
,所以我尝试以编程方式触发此事件(尽管这是我通常试图避免的事情)以查看是否可以选择。这是我的代码:
comboBox.RaiseEvent
(
new MouseButtonEventArgs
(
Mouse.PrimaryDevice,
Environment.TickCount,
MouseButton.Left
)
{
RoutedEvent = PreviewMouseLeftButtonDownEvent
}
);
我使用 Console.WriteLine()
打印一条简单的消息,以在输出 Window 中验证事件是否被触发,确实如此。但是,我的 ComboBox 中仍然没有闪烁的光标。
然后我查看了 SO,发现 this question 并且 OP 的编辑修复似乎有效。然而,这似乎是完成一项看似简单的任务的相当迂回的方法,所以我想知道是否有一种相当直接或更简单的方法可以实现我想要的结果。
在 window 加载后调用 Focus()
方法对我来说似乎工作得很好:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
this.Loaded += (s,e) => comboBox.Focus();
}
}
如果它对您不起作用,请提供您问题的可重现示例:https://whosebug.com/help/mcve
在我的 WPF 程序中,我有一个标准的组合框(可编辑)。我希望的行为是在 FormLoad
时,我希望用户能够从列表中输入 ComboBox
和 select。 (在 FormLoad
处,我已经用一些字符串填充了它。)所以我设置了 comboBox.Focus()
,因为我有 IsTextSearchEnabled="True"
,这是默认行为,所以它工作正常。
我的问题是,当设置comboBox.Focus()
时,它确实聚焦了控件,但我没有在其中看到闪烁的光标。这是它的样子:
这在理论上可以完成工作,但我认为它不是很用户友好。我希望 ComboBox 具有焦点,并且还有闪烁的光标。
当我点击可编辑的 ComboBox 时,我得到了闪烁的光标,所以我查看了当我这样做时触发了什么事件。结果是 PreviewMouseLeftButtonDown
,所以我尝试以编程方式触发此事件(尽管这是我通常试图避免的事情)以查看是否可以选择。这是我的代码:
comboBox.RaiseEvent
(
new MouseButtonEventArgs
(
Mouse.PrimaryDevice,
Environment.TickCount,
MouseButton.Left
)
{
RoutedEvent = PreviewMouseLeftButtonDownEvent
}
);
我使用 Console.WriteLine()
打印一条简单的消息,以在输出 Window 中验证事件是否被触发,确实如此。但是,我的 ComboBox 中仍然没有闪烁的光标。
然后我查看了 SO,发现 this question 并且 OP 的编辑修复似乎有效。然而,这似乎是完成一项看似简单的任务的相当迂回的方法,所以我想知道是否有一种相当直接或更简单的方法可以实现我想要的结果。
在 window 加载后调用 Focus()
方法对我来说似乎工作得很好:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
this.Loaded += (s,e) => comboBox.Focus();
}
}
如果它对您不起作用,请提供您问题的可重现示例:https://whosebug.com/help/mcve