我有一个非常简单的用例,但我无法使其正常运行。我有一个ListView
,其项目模板是Note
自定义UserControl
:
每个Note
都有一些简单的控件,如图所示。
我希望它能正常工作,以便如果以编程方式或通过单击某行来选择该行,则将焦点设置到该行的第一个文本框。但是,如果您单击该行中的某个控件,它将激活该控件(即,您可以编辑Exhibit
的内容或单击Delete
按钮)。
如果我不做任何设置焦点的操作,则单击该行会突出显示该行,但不会将焦点设置为任何子控件。
在Note
控件中,我已经尝试过:
protected override void OnGotKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
base.OnGotKeyboardFocus(e);
text.Focus();
}
text
是第一个TextBox
的名称,它确实设置了焦点,但是如果我直接单击Exhibit
文本框或Delete
按钮,它也会这样做,使它们无法使用。
那么,如何在容器控件获得焦点时启用想要的焦点,除非它通过单击特定的子控件(然后应保持焦点)来获得焦点?
答案 0 :(得分:1)
经过更多的搜索,我找到了实现此问题的正确方法:在容器控件的根(本例中为Note
UserControl
),您可以指定控件的名称成为默认的焦点控件:
FocusManager.FocusedElement="{Binding ElementName=text}
不确定我怎么想念那个。