C# 如何在未聚焦时保持WPF文本框选择?
我想在WPF文本框中显示一个选择,即使它不在焦点中。我如何做到这一点?我已经将此解决方案用于RichTextBox,但我认为它也适用于标准文本框。基本上,您需要处理LostFocus事件并将其标记为已处理C# 如何在未聚焦时保持WPF文本框选择?,c#,wpf,textbox,C#,Wpf,Textbox,我想在WPF文本框中显示一个选择,即使它不在焦点中。我如何做到这一点?我已经将此解决方案用于RichTextBox,但我认为它也适用于标准文本框。基本上,您需要处理LostFocus事件并将其标记为已处理 protected void MyTextBox_LostFocus(object sender, RoutedEventArgs e) { // When the RichTextBox loses focus the user can no longer see
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;
}
文本框不会意识到它失去了焦点,仍然会显示突出显示的选择
在这种情况下,我没有使用数据绑定,因此这可能会破坏双向绑定。您可能必须在LostFocus事件处理程序中强制绑定。大概是这样的:
Binding binding = BindingOperations.GetBinding(this, TextProperty);
if (binding.UpdateSourceTrigger == UpdateSourceTrigger.Default ||
binding.UpdateSourceTrigger == UpdateSourceTrigger.LostFocus)
{
BindingOperations.GetBindingExpression(this, TextProperty).UpdateSource();
}
另一个选项是在XAML中定义一个单独的焦点范围,以维护第一个文本框中的选择
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Text="Text that does not loose selection."/>
<StackPanel Grid.Row="1" FocusManager.IsFocusScope="True">
<TextBox Text="Some more text here." />
<Button Content="Run" />
<Button Content="Review" />
</StackPanel>
</Grid>
我发现列出的建议(添加LostFocus处理程序,定义聚焦范围)不起作用,但我确实遇到了此处列出的代码:,它创建了一个自定义装饰器,在未聚焦时突出显示文本。属性自.NET Framework 4.5以来就可用
public bool IsInactiveSelectionHighlightEnabled { get; set; }
这里有一个很好的视觉演示,这个解决方案更方便我。+1个很好的解决方案-帮助我创建了一个搜索功能。。。这主要是有效的,但是在没有焦点的RichTextBox上滚动时会中断,其中包含选择项——选择项的突出显示不会随着文本移动。最好在下面回答,如果你不进入文本框,这将不起作用。如果在显示文本框之前设置了选择,或者在程序中的其他地方更改了选择,那么当文本框处于非活动状态时,您必须如何显示选择?链接断开;现在是。两个注意事项:(1)当焦点丢失时,会应用非活动高光,因此,如果该字段从未有过焦点,它将不会出现。当您以编程方式设置选择时,这一点很重要。(2)
SystemColors.InactiveSelectionHighlightBrushKey
的默认颜色是几乎不明显的暗灰色,因此建议将其更改为更鲜艳的颜色。
public bool IsInactiveSelectionHighlightEnabled { get; set; }