Wpf 当UserControl更改可见性时,请关注文本框
我在画布中加载了一个usercontrol;默认情况下,此usercontrol的可见性已折叠。当我的窗口的特定文本框被聚焦时,usercontrol将可见 当usercontrol可见时,我希望将焦点设置为usercontrol内的另一个文本框 我尝试这样做:Wpf 当UserControl更改可见性时,请关注文本框,wpf,user-controls,textbox,input,focus,Wpf,User Controls,Textbox,Input,Focus,我在画布中加载了一个usercontrol;默认情况下,此usercontrol的可见性已折叠。当我的窗口的特定文本框被聚焦时,usercontrol将可见 当usercontrol可见时,我希望将焦点设置为usercontrol内的另一个文本框 我尝试这样做: private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if (this.Visi
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
FocusManager.SetFocusedElement(this, TextBlockInput);
}
}
这似乎可行,但有一个问题:文本框似乎已聚焦,但进入文本框的光标不会闪烁,我无法键入字符进行输入
我希望在聚焦后文本框可以输入。我该怎么办?试试看
Keyboard.Focus(TextBlockInput);
有关更多详细信息,请参见
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
this.Dispatcher.BeginInvoke((Action)delegate
{
Keyboard.Focus(TextBlockInput);
}, DispatcherPriority.Render);
}
}
我认为问题在于对IsVisibleChanged事件“scope”的焦点调用……对吗?另一种可能的解决方法是使用
可见性
属性不透明度
。在本例中,调用Focus()
实际上可以设置焦点。我尝试过,但更糟的是…使用键盘。Focus(myTextBox)或myTextBox。Focus()似乎textbox没有聚焦…看不到光标。它是标准的textbox吗?或者某个第三方控件?我已经发布了我的解决方案…感谢您的帮助,问题似乎是对IsVisibleChange事件的焦点调用。从今天早上开始,我一直在尝试解决此问题。。。。你救了我一个晚上:-)非常感谢!!非常好-还为我节省了一些工作。这是一个糟糕的建议:visilibility.Collapsed
与Opacity=0
非常不同。逻辑/键盘焦点、鼠标事件触发、主题化,一切都不同<代码>不透明度是关于美学,可见性
是关于视觉树的。@Askolein正如我在回答中所说的,这是一种变通方法,不是一个合适的解决方案。