Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在未聚焦时保持WPF文本框选择?_C#_Wpf_Textbox - Fatal编程技术网

C# 如何在未聚焦时保持WPF文本框选择?

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

我想在WPF文本框中显示一个选择,即使它不在焦点中。我如何做到这一点?

我已经将此解决方案用于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;
  }
文本框不会意识到它失去了焦点,仍然会显示突出显示的选择

在这种情况下,我没有使用数据绑定,因此这可能会破坏双向绑定。您可能必须在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; }