Как сохранить выделение WPF TextBox, когда оно не сфокусировано? - PullRequest
21 голосов
/ 13 марта 2009

Я хочу показать выделение в текстовом поле WPF, даже если оно не в фокусе. Как я могу это сделать?

Ответы [ 5 ]

27 голосов
/ 13 марта 2009

Я использовал это решение для 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();
     }
10 голосов
/ 21 августа 2010

Другой вариант - определить отдельную область фокуса в XAML, чтобы сохранить выделение в первом TextBox.

<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>
2 голосов
/ 18 июня 2011
public class CustomRichTextBox : RichTextBox
{
     protected override void OnLostFocus(RoutedEventArgs e)
     {

     }
}
1 голос
/ 07 мая 2018

TextBoxBase.IsInactiveSelectionHighlightEnabled Свойство доступно с .NET Framework 4.5

public bool IsInactiveSelectionHighlightEnabled { get; set; }
1 голос
/ 21 мая 2012

Я обнаружил, что перечисленные предложения (добавить обработчик LostFocus, определяющий FocusScope) не работают, но я наткнулся на код, указанный здесь: http://naracea.com/2011/06/26/selection-highlight-and-focus-on-wpf-textbox/,, который создает пользовательский Adorner, который выделяет текст, когда не сфокусированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...