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>

ビヘイビアーを使用するには、2 つの名前空間を に追加する必要があり.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

PreviewMouseDoubleClickTextBox を使用すると、イベントを追加できます。

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

次に、 の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();
}
于 2013-04-16T17:00:13.997 に答える