6

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

谢谢!

4

2 回答 2

13

这就是你要做的:

首先,将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下载它。

于 2013-04-16T16:46:53.570 回答
7

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

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

然后将 的TextBox.SelectedText属性设置为.TextBoxTextBox

private void TextBoxSelectAll(object sender, MouseButtonEventArgs e) {
    // Set the event as handled
    e.Handled = true;
    // Select the Text
    (sender as TextBox).SelectAll();
}
于 2013-04-16T17:00:13.997 回答