2017-02-17 4 views
5

WPFのテキストボックスは最近のUIのようなトリプルクリックの動作をサポートしていません。なぜWPFテキストボックスはトリプルクリックをサポートしていないので、すべてのテキストを選択する

"トリプルクリック"とは、テキストボックス内のテキスト行をダブルクリックすると1つの単語が選択され、3回クリックすると行全体が選択されます。

テキストボックスやその他の回避策に適用できる属性はありますか? MicrosoftがWPFテキストボックスのデフォルトの動作として実装する可能性はありますか?

答えて

8

を使用して、それを試すことができ、手動でこれを実装することができます。しかし、あなたのアプリケーションの各テキストボックスに対してこれを行う必要はありません。だから、添付プロパティを実装し、このように、スタイルでそれを設定することができます。

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

は、次にどこか(App.xaml内のアプリケーションのリソースで例えば)スタイルを作成

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

今、すべてのテキストボックス意志自動的にこのトリプルクリックの動作をします。

2

あなたはすでに答えPreviewMouseDownイベントに

private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e){ 

    if (e.ClickCount == 3) { 
    MyTexBox.SelectAll(); 
    } 
} 
関連する問題