是否有一個原因,爲什麼WPF文本框不支持像現代UI最近那樣的三擊行爲?爲什麼WPF文本框不支持三擊選擇所有文本
通過「三擊」,我的意思是:雙擊文本在文本行選擇一個單詞,而三擊選擇整行。
是否有可應用於文本框或其他解決辦法的屬性?微軟是否有機會將其作爲WPF文本框的默認行爲來實現?
是否有一個原因,爲什麼WPF文本框不支持像現代UI最近那樣的三擊行爲?爲什麼WPF文本框不支持三擊選擇所有文本
通過「三擊」,我的意思是:雙擊文本在文本行選擇一個單詞,而三擊選擇整行。
是否有可應用於文本框或其他解決辦法的屬性?微軟是否有機會將其作爲WPF文本框的默認行爲來實現?
前面已經回答了,你可以手動實現一個嘗試。但是您不希望爲應用程序中的每個文本框執行此操作。所以,你可以實現附加屬性,並設置它的風格,就像這樣:
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>
現在所有的文本框會自動有這種三擊行爲。
您可以通過使用PreviewMouseDown-事件
private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e){
if (e.ClickCount == 3) {
MyTexBox.SelectAll();
}
}