Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XAML中是否有方法在双击时选择textbox中的所有文本?_C#_Wpf_Xaml - Fatal编程技术网

C# 在XAML中是否有方法在双击时选择textbox中的所有文本?

C# 在XAML中是否有方法在双击时选择textbox中的所有文本?,c#,wpf,xaml,C#,Wpf,Xaml,是否有一种方法纯粹通过XAML突出显示文本框中的所有文本,还是必须在XAML.cs中完成 谢谢 这就是你要做的: 首先,将DoubleClickBehavior.cs类添加到项目中 class DoubleClickBehavior : Behavior<TextBox> { protected override void OnAttached() { AssociatedObject.MouseDoubleClick

是否有一种方法纯粹通过XAML突出显示文本框中的所有文本,还是必须在XAML.cs中完成


谢谢

这就是你要做的:

首先,将
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();
}