我有一個WP8應用程序,其頂部有一個文本框,一對其他控件,另外三個文本框以及底部的兩個切換開關。我在頁面上使用了三個Telerik RadToggleSwitches,還有一個Telerik RadListPicker(列表中的三個項目)。如何讓SIP隱藏文本框?
在代碼隱藏中,當任何文本框獲得焦點時,我創建一個帶兩個按鈕的ApplicationBar。其中一個按鈕是Next,它將焦點移動到下一個文本框。當文本框失去焦點時,我隱藏應用程序欄。
現在,問題所在。有時候,看起來完全是隨機的,頁面不會向上轉換,使得文本框可以從SIP後面看到。 InputScope,BTW,是Number。我可以點擊任何文本框,並且有時會在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>
這是全部在一個堆棧面板內,並且該堆棧面板在一個滾動查看器內。
感謝您的時間 - 任何幫助表示讚賞。
那麼,我最終通過在構造函數中創建應用欄並禁用按鈕來解決問題。當一個文本框獲得焦點時,我啓用這些按鈕,當它失去焦點時,我禁用這些按鈕。這不是我想要的效果,但它解決了SIP覆蓋的焦點文本框的問題。 –
我在wp8上面臨類似的問題。 – db42