我在画布中加载了一个usercontrol;默认情况下,此usercontrol的可见性已折叠。当我的窗口的特定文本框被聚焦时,用户控件变得可见。
当usercontrol可见时,我想将焦点设置到usercontrol中的另一个文本框。
我试着这样做:
private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if (this.Visibility == Visibility.Visible)
{
FocusManager.SetFocusedElement(this, TextBlockInput);
}
}
看起来很有效,但是有一个问题:文本框看起来很集中,但光标到文本框不会闪烁,我也无法输入字符作为输入。
我希望在焦点后文本框已准备好输入。我该怎么办?
答案 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)
答案 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();
});
});
实际上会设置焦点。