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

时间:2018-07-20 14:17:47

标签: wpf wpf-controls

我有一个非常简单的用例,但我无法使其正常运行。我有一个ListView,其项目模板是Note自定义UserControl

enter image description here

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

我希望它能正常工作,以便如果以编程方式或通过单击某行来选择该行,则将焦点设置到该行的第一个文本框。但是,如果您单击该行中的某个控件,它将激活该控件(即,您可以编辑Exhibit的内容或单击Delete按钮)。

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

Note控件中,我已经尝试过:

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

    text.Focus();
}

text是第一个TextBox的名称,它确实设置了焦点,但是如果我直接单击Exhibit文本框或Delete按钮,它也会这样做,使它们无法使用。

那么,如何在容器控件获得焦点时启用想要的焦点,除非它通过单击特定的子控件(然后应保持焦点)来获得焦点?

1 个答案:

答案 0 :(得分:1)

经过更多的搜索,我找到了实现此问题的正确方法:在容器控件的根(本例中为Note UserControl),您可以指定控件的名称成为默认的焦点控件:

FocusManager.FocusedElement="{Binding ElementName=text}

不确定我怎么想念那个。