我有一个用户控件,它嵌套在充当对话框显示窗口的外壳内。我忽略了外壳窗口中的焦点,并在托管的用户控件中使用 FocusManager 将初始焦点设置为命名元素(文本框),如下所示。
这样做确实可以将光标置于命名文本框的开头;但是我想选择所有文本。
TextBoxSelectionBehavior 类(以下)通常可以做到这一点,但在这种情况下不行。是否有一种简单的 XAML 修复方法可以在初始焦点上选择命名文本框中的文本?
谢谢,
Berryl
文本框选择行为
// in app startup
TextBoxSelectionBehavior.RegisterTextboxSelectionBehavior();
/// <summary>
/// Helper to select all text in the text box on entry
/// </summary>
public static class TextBoxSelectionBehavior
{
public static void RegisterTextboxSelectionBehavior()
{
EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotFocusEvent, new RoutedEventHandler(OnTextBox_GotFocus));
}
private static void OnTextBox_GotFocus(object sender, RoutedEventArgs e)
{
var tb = (sender as TextBox);
if (tb != null)
tb.SelectAll();
}
}
托管的用户控件
<UserControl
<DockPanel KeyboardNavigation.TabNavigation="Local"
FocusManager.FocusedElement="{Binding ElementName=tbLastName}" >
<TextBox x:Name="tbLastName" ... />
临时解决方案
根据以下与Rachel的评论,我放弃了FocusManager而选择一些后端代码:
tbLastName.Loaded += (sender, e) => tbLastName.Focus();
虽然我仍然希望有一种声明性方法来完成简单而常见的任务...