如何将焦点设置在用户控件的元素上

本文关键字:控件 元素 用户 焦点 设置 | 更新日期: 2023-09-27 18:18:20

我有一个用户控件,上面有一个TextBox。如果我在构造函数中将焦点设置在TextBox上,那么TextBox就会按预期工作。但有时,我不希望TextBox在用户控件首次显示时具有焦点,因此我向用户控件添加了一个属性,该属性将焦点设置为TextBox。这是有效的,虽然我得到的问题是,我不能然后重置焦点在TextBox失去焦点后。

没有人知道为什么会发生这种情况吗?

    public ucQueryBox()
    {
        InitializeComponent();
        // Set default values for properties
        CodePrompt = "Barcode";
        TextBoxFontSize = 20;
        TextBoxMaxWidth = 0;
        Label = "";
        LabelFontSize = 20;
        LabelForeground = Colors.White.ToString();
        KeyboardButtonVisibility = Visibility.Visible;
        txtSelection.Focus();
    }
    /// <summary>
    /// Allows user to decide whether or the user control should have focus when it loads
    /// Focus puts the green boarder around the textbox
    /// </summary>
    [Browsable(true)]
    public Boolean SetFocusOnLoad
    {
        get { return _bSetFocusOnLoad; }
        set 
        { 
            _bSetFocusOnLoad = value;
            if (_bSetFocusOnLoad)
                txtSelection.Focus();
        }
    }

如何将焦点设置在用户控件的元素上

WPF中的焦点是一个复杂的主题。我想你会发现,做你想要的正确的方法是使用FocusManager在你的XAML:

<UserControl ... FocusManager.FocusedElement="{Binding ElementName=myTextBox}">
    <TextBox x:Name="myTextBox" />
</UserControl>

如果你使用FocusManager这样建立所有的焦点要求(也就是说,你使用FocusManager在所有的Windows和用户控件有任何类型的焦点要求),那么你可能会发现,所有的聚焦工作完全像你期望的。