Я хочу показать выделение в текстовом поле WPF, даже если оно не находится в фокусе. Как я могу это сделать?
Как сохранить выбор WPF TextBox, когда он не сфокусирован?
Ответ 1
Я использовал это решение для 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();
}
Ответ 2
Другим вариантом является определение отдельной области фокусировки в 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>
Ответ 3
public class CustomRichTextBox : RichTextBox
{
protected override void OnLostFocus(RoutedEventArgs e)
{
}
}
Ответ 4
Я обнаружил, что перечисленные предложения (добавьте обработчик LostFocus, определяющий FocusScope), чтобы не работать, но я столкнулся с приведенным здесь кодом: http://naracea.com/2011/06/26/selection-highlight-and-focus-on-wpf-textbox/, который создает пользовательский Adorner, который выделяет текст, когда он не сфокусирован.
Ответ 5
Свойство TextBoxBase.IsInactiveSelectionHighlightEnabled доступно с .NET Framework 4.5
public bool IsInactiveSelectionHighlightEnabled { get; set; }