1

上部にテキストボックス、他に2つのコントロール、さらに3つのテキストボックス、下部に2つのトグルスイッチがある1ページのWP8アプリがあります。ページで3つのTelerikRadToggleSwitchを使用し、1つのTelerik RadListPicker(リスト内の3つのアイテム)を使用しています。

コードビハインドでは、テキストボックスにフォーカスが入ると、2つのボタンを持つApplicationBarを作成します。それらのボタンの1つは、フォーカスを次のテキストボックスに移動する[次へ]です。テキストボックスがフォーカスを失うと、アプリケーションバーを非表示にします。

さて、問題。時々、一見完全にランダムに見えますが、ページが上向きに変形せず、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である可能性がありますが、Telerikコントロールからアクセスせずにテキストボックスをタップして問題を再現できるため、強気ではありません。

重要な場合に備えて、テキストボックスの1つからのマークアップを次に示します。それらはすべて本質的に同じです:

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

これはすべてスタックパネル内にあり、スタックパネルはスクロールビューア内にあります。

お時間をいただきありがとうございます-どんな助けでも大歓迎です。

4

1 に答える 1

0

私は同様の問題に直面し、修正を見つけるために1日を費やしました。私のために働いた解決策:

削除する

ApplicationBar.IsVisible = false; 

から

   private void onTextLostFocus(object sender, System.Windows.RoutedEventArgs e)
    {
      //ApplicationBar.IsVisible = false;

私の場合、私はとに設定IsVisibleonTextGotFocus()ていましonTextLostFocus()た。両方の関数からそれを削除することでうまくいきました。

なぜそれが機能したのか、まだ完全な説明がありません。この問題は、ページが完全に読み込まれていないことに関連しているようです。のMSDNドキュメントは次のようにIsVisible述べています。

This property cannot be accessed using XAML syntax. It can be accessed only when there is a page loaded.

また、あなたの場合IsVisible = false、ページがロードされるタイミングを設定できonSettingsLoaded()ます。

于 2013-03-19T11:46:29.250 に答える