Wpf 除非用户单击其他子控件,否则如何将焦点设置为默认子控件?

Wpf 除非用户单击其他子控件,否则如何将焦点设置为默认子控件?,wpf,wpf-controls,Wpf,Wpf Controls,我有一个非常简单的用例,但我不能让它正常工作。我有一个列表视图,它的项目模板是注释自定义用户控件: 每个注释都有一些简单的控件,如图所示 我希望这样做,如果以编程方式或通过单击某行中的某个位置来选择该行,它会将焦点设置为该行中的第一个文本框。但是,如果您单击行中的控件,它将激活该控件(即允许您编辑附件内容或单击删除按钮) 如果我不做任何设置焦点的操作,单击该行将高亮显示该行,但不会将焦点设置为任何子控件 在注意控件中,我尝试了以下方法: protected override void OnGo

我有一个非常简单的用例,但我不能让它正常工作。我有一个
列表视图
,它的项目模板是
注释
自定义
用户控件

每个
注释
都有一些简单的控件,如图所示

我希望这样做,如果以编程方式或通过单击某行中的某个位置来选择该行,它会将焦点设置为该行中的第一个文本框。但是,如果您单击行中的控件,它将激活该控件(即允许您编辑
附件
内容或单击
删除
按钮)

如果我不做任何设置焦点的操作,单击该行将高亮显示该行,但不会将焦点设置为任何子控件

注意
控件中,我尝试了以下方法:

protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
    base.OnGotKeyboardFocus(e);

    text.Focus();
}
text
是第一个
TextBox
的名称,它确实设置了焦点,但如果我直接单击
Exhibit
TextBox或
Delete
按钮,使其不可用,它也会这样做


那么,当容器控件获得焦点时,我如何才能启用我想要的焦点,除非它通过单击特定的子控件(该子控件应保持焦点)获得该焦点?

在进一步搜索后,我找到了正确的实现方法:在容器控件的根目录下(在我的例子中,
注释
用户控件
),您可以将控件的名称指定为默认焦点控件:

FocusManager.FocusedElement="{Binding ElementName=text}
不知道我怎么会错过那一次