当UserControl更改可见性时,请关注TextBox

时间:2010-06-24 10:24:55

标签: wpf user-controls textbox input focus

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

当usercontrol可见时,我想将焦点设置到usercontrol中的另一个文本框。

我试着这样做:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
        if (this.Visibility == Visibility.Visible)
        {                
            FocusManager.SetFocusedElement(this, TextBlockInput);
        }
}

看起来很有效,但是有一个问题:文本框看起来很集中,但光标到文本框不会闪烁,我也无法输入字符作为输入。

我希望在焦点后文本框已准备好输入。我该怎么办?

3 个答案:

答案 0 :(得分:32)

好吧,我这样解决了:

private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    if (this.Visibility == Visibility.Visible)
    {
        this.Dispatcher.BeginInvoke((Action)delegate
        {
            Keyboard.Focus(TextBlockInput);
        }, DispatcherPriority.Render);
    }
}

我认为问题是焦点调用IsVisibleChanged事件“范围”......对吗?

答案 1 :(得分:1)

Keyboard.Focus(TextBlockInput);

有关详细信息,请参阅here

答案 2 :(得分:-1)

另一种可能的解决方法是使用Visibility属性Opacity而不是Focus()。在这种情况下,调用$http.get('webservice/image/' + item.imageId).then(function(response) { $cordovaFile.writeFile( cordova.dataDirectory, item.imageId, response.data, true).then(function() { item.imagePath = cordova.dataDirectory + item.imageId; item.update(); }); }); 实际上会设置焦点。