2009-03-13 8 views

Odpowiedz

27

Użyłem tego rozwiązania dla RichTextBox, ale zakładam, że będzie również działać na standardowe pole tekstowe. Zasadniczo, musisz zająć się zdarzeniem LostFocus i oznaczyć je jako obsługiwane.

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

Moduł TextBox nie będzie wiedział, że utracił fokus i nadal będzie wyświetlać zaznaczony wybór.

Nie używam powiązania danych w tym przypadku, więc może się zdarzyć, że to zepsułoby wiązanie w obie strony. Być może będziesz musiał wymusić wiązanie w procedurze obsługi zdarzenia LostFocus. Coś takiego:

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

To zadziałało! Dzięki! –

+0

+1 Przyjemne rozwiązanie - pomogło mi w tworzeniu funkcji wyszukiwania ... Thx – reSPAWNed

+1

To głównie działa, ale przerywa przewijanie na nieostrych RichTextBoxach z zaznaczonymi w nich wyborami - zaznaczenie zaznaczenia nie przesuwa się wraz z tekstem. – Cameron

10

Inną opcją jest zdefiniowanie odrębnego zakresu ostrości w XAML utrzymać wybór w pierwszym polu tekstowym.

<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

Mamy dobrą wizualną demonstrację tego na http://wpfhacks.blogspot.com/2009/06/correct-way-keep-selection-in-textbox.html – mtlynch

+0

To rozwiązanie jest dla mnie bardziej wygodne. – tharibo

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

    } 
} 
Powiązane problemy