2017-02-17 8 views
5

Czy istnieje powód, dla którego pole tekstowe WPF nie obsługuje zachowań typu "triple-click", takich jak większość współczesnych interfejsów użytkownika?Dlaczego pole tekstowe WPF nie obsługuje potrójnego kliknięcia, aby zaznaczyć cały tekst?

Przez "potrójne kliknięcie" mam na myśli: podwójne kliknięcie na linię tekstu w polu tekstowym wybiera pojedyncze słowo, a potrójne kliknięcie zaznacza całą linię.

Czy istnieje atrybut, który można zastosować do pola tekstowego lub innego sposobu obejścia tego problemu? Czy jest jakaś szansa, że ​​Microsoft zaimplementuje go jako domyślne zachowanie dla pola tekstowego WPF?

Odpowiedz

8

Jak już odpowiedział, że można realizować ręcznie. Ale nie chcesz tego robić dla każdego pola tekstowego w aplikacji. Więc można realizować załączony właściwość i ustawić go w stylu, jak to:

public static class TextBoxBehavior { 
    public static readonly DependencyProperty TripleClickSelectAllProperty = DependencyProperty.RegisterAttached(
     "TripleClickSelectAll", typeof(bool), typeof(TextBoxBehavior), new PropertyMetadata(false, OnPropertyChanged)); 

    private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { 
     var tb = d as TextBox; 
     if (tb != null) { 
      var enable = (bool)e.NewValue; 
      if (enable) { 
       tb.PreviewMouseLeftButtonDown += OnTextBoxMouseDown; 
      } 
      else { 
       tb.PreviewMouseLeftButtonDown -= OnTextBoxMouseDown; 
      } 
     } 
    } 

    private static void OnTextBoxMouseDown(object sender, MouseButtonEventArgs e) { 
     if (e.ClickCount == 3) 
     { 
      ((TextBox)sender).SelectAll(); 
     } 
    } 

    public static void SetTripleClickSelectAll(DependencyObject element, bool value) 
    { 
     element.SetValue(TripleClickSelectAllProperty, value); 
    } 

    public static bool GetTripleClickSelectAll(DependencyObject element) { 
     return (bool) element.GetValue(TripleClickSelectAllProperty); 
    } 
} 

Następnie należy utworzyć styl gdzieś (na przykład w zasobach aplikacji w App.xaml):

<Application.Resources> 
    <Style TargetType="TextBox"> 
     <Setter Property="local:TextBoxBehavior.TripleClickSelectAll" 
       Value="True" /> 
    </Style> 
</Application.Resources> 

Teraz wszystko będzie twoje tekstowych automatycznie ma to zachowanie z trzema kliknięciami.

2

Można spróbować go za pomocą PreviewMouseDown-Event

private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e){ 

    if (e.ClickCount == 3) { 
    MyTexBox.SelectAll(); 
    } 
} 
Powiązane problemy