Я понимаю, что это очень старо, но вот мое решение, которое основано на пространствах имен выражений / взаимодействия Microsoft и взаимодействий.
Сначала я следовал инструкциям по этой ссылке , чтобы поместить триггеры интерактивности в стиль.
Тогда все сводится к этому
<Style x:Key="baseTextBox" TargetType="TextBox">
<Setter Property="gint:InteractivityItems.Template">
<Setter.Value>
<gint:InteractivityTemplate>
<gint:InteractivityItems>
<gint:InteractivityItems.Triggers>
<i:EventTrigger EventName="GotKeyboardFocus">
<ei:CallMethodAction MethodName="SelectAll"/>
</i:EventTrigger>
<i:EventTrigger EventName="PreviewMouseLeftButtonDown">
<ei:CallMethodAction MethodName="TextBox_PreviewMouseLeftButtonDown"
TargetObject="{Binding ElementName=HostElementName}"/>
</i:EventTrigger>
</gint:InteractivityItems.Triggers>
</gint:InteractivityItems>
</gint:InteractivityTemplate>
</Setter.Value>
</Setter>
</Style>
и это
public void TextBox_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TextBox tb = e.Source as TextBox;
if((tb != null) && (tb.IsKeyboardFocusWithin == false))
{
tb.Focus();
e.Handled = true;
}
}
В моем случае у меня есть пользовательский элемент управления, в котором находятся текстовые поля с выделенным кодом. Код позади имеет функцию обработчика. Я дал своему пользовательскому элементу управления имя в xaml, и я использую это имя для элемента. Это прекрасно работает для меня. Просто примените стиль к любому текстовому полю, в котором вы хотите, чтобы весь текст выделялся при щелчке в текстовом поле.
Первый CallMethodAction вызывает функцию SelectAll текстового поля при возникновении события GotKeyboardFocus в текстовом поле.
Надеюсь, это поможет.