2017-02-17 37 views
5

, bir WPF metin kutusunun, bugünlerde çoğu modern kullanıcı arabirimi gibi üç tıklatma davranışını desteklememesinin bir nedeni var mı?WPF metin kutusu, tüm metinleri seçmek için üç kez tıklatmayı desteklemiyor

"Üç tık" ile demek istediğim: bir metin kutusundaki bir metin satırını çift tıklatarak tek bir sözcük seçer, üç tık tıklaması ise tüm satırı seçer.

Metin kutusuna veya başka bir geçici çözüm için uygulanabilecek bir özellik var mı? Microsoft'un bunu bir WPF metin kutusu için varsayılan davranış olarak uygulayacağı ihtimali var mı?

cevap

8

, el o uygulayabilirsiniz kullanarak deneyebilirsiniz. Ancak, uygulamanızdaki her bir metin kutusu için bunu yapmak istemezsiniz. Yani ekli özelliğini uygulamak ve bunun gibi, tarzında ayarlayabilirsiniz:

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

Sonra bir yerde (App.xaml uygulama kaynaklarında örneğin) stil oluşturmak

:

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

Şimdi tüm metin kutularının olacak otomatik olarak bu üç tıklatma davranışına sahip olursunuz.

2

Sen PreviewMouseDown-Olay

Daha önce cevap
private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e){ 

    if (e.ClickCount == 3) { 
    MyTexBox.SelectAll(); 
    } 
}