双击时,XAML中是否有一种方法可以选择文本框中的所有文本?

时间:2013-04-16 15:52:21

标签: c# wpf xaml

有没有办法纯粹通过XAML突出显示文本框中的所有文本,或者是否必须在Xaml.cs中完成

谢谢!

2 个答案:

答案 0 :(得分:11)

这就是你要做的事情:

首先,将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中,将此行为添加到TextBox:

<TextBox>
        <i:Interaction.Behaviors>
            <local:DoubleClickBehavior/>
        </i:Interaction.Behaviors>
</TextBox>

您需要向.xaml添加两个名称以使用您的行为。 (我的项目名称是WpfApplication1,因此您可能需要更改它:)

 xmlns:local ="clr-namespace:WpfApplication1" 
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

就是这样。您还需要System.Windows.Interactivity.dll才能使用Behavior类。

您可以从Nuget Package Manager下载。

答案 1 :(得分:5)

使用TextBox,您可以添加PreviewMouseDoubleClick事件。

<TextBox DockPanel.Dock="Top" Name="MyTextBox" AcceptsReturn="True" PreviewMouseDoubleClick="TextBoxSelectAll"/>

然后,您将TextBox的{​​{3}}设置为TextBox中的文字。

private void TextBoxSelectAll(object sender, MouseButtonEventArgs e) {
    // Set the event as handled
    e.Handled = true;
    // Select the Text
    (sender as TextBox).SelectAll();
}