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

C# 如何在用户控件的元素上设置焦点?,c#,wpf,textbox,focus,C#,Wpf,Textbox,Focus,我有一个用户控件,上面有一个文本框。如果我在构造函数中将焦点设置在TextBox上,那么TextBox将按预期工作。但有时,我不希望在第一次显示用户控件时,TextBox具有焦点,因此我向用户控件添加了一个属性,将焦点设置为TextBox。这是可行的,尽管我遇到了一个问题,那就是在文本框失去焦点后,我无法重新设置焦点 难道没有人知道为什么会发生这种情况吗 public ucQueryBox() { InitializeComponent(); /

我有一个用户控件,上面有一个
文本框
。如果我在构造函数中将焦点设置在
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();
        }
    }
public ucQueryBox()
{
初始化组件();
//设置属性的默认值
CodePrompt=“条形码”;
TextBoxFontSize=20;
TextBoxMaxWidth=0;
标签=”;
LabelFontSize=20;
LabelForeground=Colors.White.ToString();
KeyboardButtonVisibility=可见性。可见;
txtSelection.Focus();
}
/// 
///允许用户决定加载时用户控件是否应具有焦点
///Focus将绿色边框放在文本框周围
/// 
[可浏览(正确)]
公共布尔值SetFocusOnLoad
{
获取{return\u bSetFocusOnLoad;}
设置
{ 
_bSetFocusOnLoad=值;
如果(bSetFocusOnLoad)
txtSelection.Focus();
}
}

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

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


如果您像这样使用FocusManager来建立所有焦点需求(也就是说,您在所有具有任何焦点需求的窗口和用户控件上使用FocusManager),那么您可能会发现所有的焦点工作都与您期望的完全一样。

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

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


如果您像这样使用
FocusManager
来确定所有的焦点要求(即,您在所有具有任何焦点要求的窗口和用户控件上使用FocusManager),那么您可能会发现所有的焦点工作都与您期望的完全一样。

我怀疑是否有人能够为您回答这个问题。您认为应该将焦点返回文本框的代码可能没有执行。也许这句话需要在其他地方,或者你需要订阅另一个你知道会发生的事件,当你想返回焦点时。我怀疑是否有人能为你回答这个问题。您认为应该将焦点返回文本框的代码可能没有执行。也许该行需要在其他地方,或者您需要订阅另一个事件,您知道当您想要返回焦点时将发生该事件。