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

时间:2013-06-13 16:12:43

标签: c# wpf textbox focus

我有一个用户控件,上面有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();
        }
    }

1 个答案:

答案 0 :(得分:1)

专注于WPF是一个复杂的话题。我想你会发现做你想做的事的正确方法是在你的XAML中使用FocusManager

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

如果您使用FocusManager这样建立所有焦点要求(即,您在所有具有任何焦点要求的Windows和UserControl上使用FocusManager),那么您可能会发现所有焦点都有效完全像你期望的那样。