C# 在XAML中是否有方法在双击时选择textbox中的所有文本?
是否有一种方法纯粹通过XAML突出显示文本框中的所有文本,还是必须在XAML.cs中完成C# 在XAML中是否有方法在双击时选择textbox中的所有文本?,c#,wpf,xaml,C#,Wpf,Xaml,是否有一种方法纯粹通过XAML突出显示文本框中的所有文本,还是必须在XAML.cs中完成 谢谢 这就是你要做的: 首先,将DoubleClickBehavior.cs类添加到项目中 class DoubleClickBehavior : Behavior<TextBox> { protected override void OnAttached() { AssociatedObject.MouseDoubleClick
谢谢 这就是你要做的: 首先,将
DoubleClickBehavior.cs
类添加到项目中
class DoubleClickBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
AssociatedObject.MouseDoubleClick += AssociatedObjectMouseDoubleClick;
base.OnAttached();
}
protected override void OnDetaching()
{
AssociatedObject.MouseDoubleClick -= AssociatedObjectMouseDoubleClick;
base.OnDetaching();
}
private void AssociatedObjectMouseDoubleClick(object sender, RoutedEventArgs routedEventArgs)
{
AssociatedObject.SelectAll();
}
}
您需要在.xaml
中添加两个名称才能使用您的行为。(我的项目名称是WpfApplication1
,因此您可能需要更改该名称):
就这样。您还需要System.Windows.Interactivity.dll
来使用行为
类
您可以从下载。通过文本框,您可以添加
预览鼠标双击事件
<TextBox DockPanel.Dock="Top" Name="MyTextBox" AcceptsReturn="True" PreviewMouseDoubleClick="TextBoxSelectAll"/>
您不能单独在xaml中完成这项工作,但不必专门在代码隐藏中完成。您可以编写一个行为来完成它。然后,您可以仅使用xaml应用该行为。下面是一个应该让你们开始学习的例子:我可以向你们展示亨里克建议的行为问题的确切例子。当doble单击textbox时,您要求它高亮显示textbox中的所有文本。但是WPF中的defualt确实是这样的。感谢您的回复,我正在查看Henrik发布的示例。Farhad:当我双击文本时,它只高亮显示一个单词,我认为默认情况下它应该高亮显示所有单词。再次感谢这听起来像是预期的行为,我认为3次点击会调用SelectAll(),正如他所说的,他希望通过xaml实现taht。但是,无论如何,这也是有帮助的。@FarhadJabiyev您的行为
也做了同样的事情,在我的XAML中,文本的选择直接附加到双击操作上。在XAML中,添加行为
以附加事件。同样的事情,我的似乎更简单。@FarhadJabiyev怎么会这样?文本的选择是否不属于GUI(视图)的一部分,也不属于Model
或ViewModel
的一部分?我错了吗?我是MVVM的新手。如果我错了,请纠正我。@FarhadJabiyev我不相信有任何MVVM,文本框的操作是UI的一部分,而不是数据的操作,因为数据没有变化,不同于我们操作数据(即将TextBox.Text
更改为其他内容)。
xmlns:local ="clr-namespace:WpfApplication1"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<TextBox DockPanel.Dock="Top" Name="MyTextBox" AcceptsReturn="True" PreviewMouseDoubleClick="TextBoxSelectAll"/>
private void TextBoxSelectAll(object sender, MouseButtonEventArgs e) {
// Set the event as handled
e.Handled = true;
// Select the Text
(sender as TextBox).SelectAll();
}