我有一个 WP8 应用程序,其中一个页面在顶部有一个文本框、几个其他控件、三个文本框和两个在底部的切换开关。我在页面上使用了三个 Telerik RadToggleSwitches,和一个 Telerik RadListPicker(列表中的 3 个项目)。
在代码隐藏中,当任何文本框获得焦点时,我创建一个带有两个按钮的 ApplicationBar。其中一个按钮是 Next,它将焦点移动到下一个文本框。当文本框失去焦点时,我隐藏了应用程序栏。
现在,问题。有时,看似完全随机,页面不会向上转换以使文本框从 SIP 后面可见。InputScope,顺便说一句,是数字。我可以点击任何文本框,有时它会随着 SIP 变得可见而向上转换,有时它不会。即使只是来回点击文本框,我偶尔也会让它不起作用。
这是相关的代码隐藏。
void onSettingsLoaded(object sender, RoutedEventArgs e)
{
ApplicationBar = new ApplicationBar();
ApplicationBar.IsVisible = false;
}
private void onTextGotFocus(object sender, System.Windows.RoutedEventArgs e)
{
CreateTxtAppBar();
tb = sender as TextBox;
tb.SelectAll();
}
private void CreateTxtAppBar()
{
ApplicationBar.Buttons.Clear();
ApplicationBar.MenuItems.Clear();
ApplicationBar.IsVisible = true;
ApplicationBarIconButton btnNext = new ApplicationBarIconButton(new Uri("/Toolkit.Content/next.png", UriKind.Relative));
ApplicationBarIconButton btnOK = new ApplicationBarIconButton(new Uri("/Toolkit.Content/appbar.check.png", UriKind.Relative));
btnOK.Text = LStrings.OK;
btnNext.Text = LStrings.Next;
ApplicationBar.Buttons.Add(btnNext);
ApplicationBar.Buttons.Add(btnOK);
btnNext.Click += btnNext_Click;
btnOK.Click += onBtnOKClick;
}
void btnNext_Click(object sender, EventArgs e)
{
switch(tb.Name)
{
case "tb1":
this.Focus();
tb2.Focus();
break;
case "tb2":
tb3.Focus();
break;
case "tb3":
tb4.Focus();
break;
default:
tb1.Focus();
break;
}
}
private void onTextLostFocus(object sender, System.Windows.RoutedEventArgs e)
{
ApplicationBar.IsVisible = false;
ApplicationBar.Buttons.Clear();
ApplicationBar.MenuItems.Clear();
}
如您所见,我试图通过在需要改变焦点的地方粘贴 this.Focus() 来使其工作,但这并没有做到。有时我点击一个文本框并且没有转换,并且键盘隐藏了刚刚获得焦点的文本框 - 没有其他控件参与该操作。
有谁知道为什么会这样?我在 WP7 中没有看到这种行为,所以要么我很幸运,要么(更有可能,因为我似乎找不到任何其他有这个确切问题的帖子)WP8 出现了一个新问题。或者它可能是 Telerik,因为这是我第一次使用它们,但我不看好那个,因为我可以在不来自任何 Telerik 控件的情况下点击文本框并重现问题。
以防万一,这是其中一个文本框的标记。它们本质上都是一样的:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="2*" />
<ColumnDefinition
Width="1*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Text="{Binding Strings.Age,
Source={StaticResource LocalStrings}}"
Style="{Binding Source={StaticResource TBStyle}}" />
<TextBox
Name="tb2"
Grid.Column="1"
Style="{StaticResource TxtStyle}"
GotFocus="onTextGotFocus"
LostFocus="onTextLostFocus"
Text="{Binding Age,
Source={StaticResource Settings},
Mode=TwoWay}" />
</Grid>
这一切都在堆栈面板中,而堆栈面板在滚动查看器中。
感谢您的宝贵时间 - 感谢您提供任何帮助。