2009-03-13 22 views

Respuesta

27

He usado esta solución para un RichTextBox, pero supongo que también funcionará para un cuadro de texto estándar. Básicamente, necesita manejar el evento LostFocus y marcarlo como manejado.

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; 
    } 

El TextBox no se dará cuenta de que perdió el foco y aún mostrará la selección resaltada.

No estoy usando el enlace de datos en este caso, por lo que es posible que esto arruine el enlace bidireccional. Es posible que tenga que forzar el enlace en su controlador de eventos LostFocus. Algo como esto:

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

Esto funcionó! ¡Gracias! –

+0

+1 Buena solución: me ayudó a crear una función de búsqueda ... Thx – reSPAWNed

+1

Esto funciona principalmente, pero se rompe al desplazarse en RichTextBoxes no enfocados con selecciones en ellos: el resaltado de selección no se mueve con el texto. – Cameron

10

Otra opción es definir un ámbito de foco separada en XAML para mantener la selección en el primer cuadro de texto.

<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> 
+1

Hay una buena demostración visual de esto en http://wpfhacks.blogspot.com/2009/06/correct-way-keep-selection-in-textbox.html – mtlynch

+0

Esta solución es más para mi conveniencia. – tharibo

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

    } 
} 
Cuestiones relacionadas