如何在不集中时保持WPF TextBox选择?

我想在WPF TextBox中显示一个选项,即使它没有聚焦。 我怎样才能做到这一点?

我已经将此解决方案用于RichTextBox,但我认为它也适用于标准文本框。 基本上,您需要处理LostFocus事件并将其标记为已处理。

protected void MyTextBox_LostFocus(object sender, RoutedEventArgs e) { // When the RichTextBox loses focus the user can no longer see the selection. // This is a hack to make the RichTextBox think it did not lose focus. e.Handled = true; } 

TextBox不会意识到它会失去焦点,仍然会显示突出显示的选择。

我在这种情况下不使用数据绑定,因此可能会破坏双向绑定。 您可能必须在LostFocus事件处理程序中强制绑定。 像这样的东西:

  Binding binding = BindingOperations.GetBinding(this, TextProperty); if (binding.UpdateSourceTrigger == UpdateSourceTrigger.Default || binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus) { BindingOperations.GetBindingExpression(this, TextProperty).UpdateSource(); } 

另一个选项是在XAML中定义单独的焦点范围,以在第一个TextBox中维护选择。

             
 public class CustomRichTextBox : RichTextBox { protected override void OnLostFocus(RoutedEventArgs e) { } } 

我发现列出的建议(添加一个LostFocus处理程序,定义一个FocusScope)不起作用,但我确实遇到了这里列出的代码: http : //naracea.com/2011/06/26/selection-highlight-and- focus-on-wpf-textbox / ,它创建一个自定义Adorner,在未聚焦时突出显示文本。

TextBoxBase.IsInactiveSelectionHighlightEnabled属性自.NET Framework 4.5起可用

public bool IsInactiveSelectionHighlightEnabled {get; 组; }