我有一个用户控件,上面有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();
}
}
答案 0 :(得分:1)
专注于WPF是一个复杂的话题。我想你会发现做你想做的事的正确方法是在你的XAML中使用FocusManager
:
<UserControl ... FocusManager.FocusedElement="{Binding ElementName=myTextBox}">
<TextBox x:Name="myTextBox" />
</UserControl>
如果您使用FocusManager
这样建立所有焦点要求(即,您在所有具有任何焦点要求的Windows和UserControl上使用FocusManager),那么您可能会发现所有焦点都有效完全像你期望的那样。