有没有理由说WPF文本框现在不像大多数现代用户界面那样支持三击行为?
通过"三击",我的意思是:双击文本框中的一行文字选择一个单词,而三击则选择整行。
是否有可以应用于文本框或其他解决方法的属性?微软是否有可能将其作为WPF文本框的默认行为实现?
答案 0 :(得分:10)
如前所述,您可以手动实现。但是,您不希望为应用程序中的每个文本框执行此操作。因此,您可以实现附加属性并将其设置为样式,如下所示:
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>
现在,您的所有文本框都会自动具有此三次单击行为。
答案 1 :(得分:2)
您可以使用PreviewMouseDown-Event
进行尝试private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e){
if (e.ClickCount == 3) {
MyTexBox.SelectAll();
}
}
答案 2 :(得分:0)
因此,如果由于某种原因,您和我一样感到困惑,因为三次点击已经被烘焙,而您实际上正在寻找一种方法来删除它,我使用了Jehof's answer,如下所示工作正常:
private void MyTextBoxPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 3)
{
e.Handled = true;
return;
}
}