如何将焦点设置在用户控件的元素上
本文关键字:控件 元素 用户 焦点 设置 | 更新日期: 2023-09-27 18:18:20
我有一个用户控件,上面有一个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();
}
}
WPF中的焦点是一个复杂的主题。我想你会发现,做你想要的正确的方法是使用FocusManager
在你的XAML:
<UserControl ... FocusManager.FocusedElement="{Binding ElementName=myTextBox}">
<TextBox x:Name="myTextBox" />
</UserControl>
如果你使用FocusManager
这样建立所有的焦点要求(也就是说,你使用FocusManager在所有的Windows和用户控件有任何类型的焦点要求),那么你可能会发现,所有的聚焦工作完全像你期望的。