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

Key*_*dly 4 c# wpf xaml

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

谢谢!

Far*_*yev 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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后.xaml,将此行为添加到TextBox:

<TextBox>
        <i:Interaction.Behaviors>
            <local:DoubleClickBehavior/>
        </i:Interaction.Behaviors>
</TextBox>
Run Code Online (Sandbox Code Playgroud)

您需要添加两个namepsaces .xaml才能使用您的行为.(我的项目名称是WpfApplication1,所以你可能需要改变它):

 xmlns:local ="clr-namespace:WpfApplication1" 
 xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Run Code Online (Sandbox Code Playgroud)

而已.你还需要System.Windows.Interactivity.dll使用这个Behavior类.

您可以从Nuget Package Manager下载它.

  • +1使用行为.我爱那些东西! (3认同)

Bob*_*ob. 5

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

<TextBox DockPanel.Dock="Top" Name="MyTextBox" AcceptsReturn="True" PreviewMouseDoubleClick="TextBoxSelectAll"/>
Run Code Online (Sandbox Code Playgroud)

然后,设置TextBox.SelectedText属性TextBox在文本TextBox.

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