2009-03-13 11 views

risposta

27

Ho usato questa soluzione per un RichTextBox, ma presumo che funzionerà anche per una casella di testo standard. Fondamentalmente, è necessario gestire l'evento LostFocus e contrassegnarlo come gestito.

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

Il TextBox non si accorgerà di aver perso la messa a fuoco e mostrerà comunque la selezione evidenziata.

In questo caso non sto utilizzando il binding dei dati, quindi potrebbe essere possibile che questo danneggi il binding a due vie. Potrebbe essere necessario forzare l'associazione nel gestore di eventi LostFocus. Qualcosa di simile a questo:

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

Questo ha funzionato! Grazie! –

+0

+1 Soluzione piacevole - mi ha aiutato con la creazione di una funzione di ricerca ... Thx – reSPAWNed

+1

Questo funziona principalmente, ma si interrompe scorrendo su RichTextBox non focalizzati con selezioni in essi - l'evidenziazione della selezione non si sposta con il testo. – Cameron

10

Un'altra opzione è quella di definire un ambito attenzione separata in XAML per mantenere la selezione nella prima 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> 
+1

C'è una buona dimostrazione visiva di questo a http://wpfhacks.blogspot.com/2009/06/correct-way-keep-selection-in-textbox.html – mtlynch

+0

Questa soluzione è più per la mia convenienza. – tharibo

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

    } 
} 
Problemi correlati