Wpf 当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

我在画布中加载了一个usercontrol;默认情况下,此usercontrol的可见性已折叠。当我的窗口的特定文本框被聚焦时,usercontrol将可见

当usercontrol可见时,我希望将焦点设置为usercontrol内的另一个文本框

我尝试这样做:

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正如我在回答中所说的,这是一种变通方法,不是一个合适的解决方案。