HubSection内のコントロールの更新2015年07月18日 15:46

今回は、簡単なゲームでも作ってみようと、ゲーム画面を構築後、入口となる画面をHubで作り始める。MSのデザインガイドによると、アプリの入口としておすすめらしい。

それらしいUIを作った後、HubSectionに埋め込んだTextBlockのText文字列を更新するコードを書こうとしてはまる。通常、コード入力時にx:Nameで定義されたXAML要素を入力すると、補完が働くが、動作しない。

少し調べると、HubSectionの内容は、DataTemplateとして定義されるので、コードからは直接のアクセスはできない。HubSectionの名前まではアクセスできるので、以前やったようにFindNameで目的のTextBlockを検索してみるが、これもだめ。MSの開発者Forumには、VisualTreeHelperを用いる例が掲載されているが、このやりかたは少し悔しい。


Application.Resources

ふと思いついて、Application Resourceを介したやり方を試してみる。表示するデータを保持するclassを定義した後、このclassをApp.xamlに定義する。

class定義

class定義では、プロパティにgetterの定義を忘れないこと。debugで手間取る。ここではまるとは情けない。

HubSection

画面を定義するMainPage.xamlのHubSectionにて、TextBlockのTextをBindingでStaticResourceから取得するように定義する。赤枠の部分。緑色の四角の中に3つのTextBlockを設けている。XAML Designerでは1つめのTextBlockのみ表示されている。

MainPage.xaml.cs抜粋

コードを記述するMainPage.xaml.csでは、5行目でResourceからオブジェクトへの参照を取り出した後、最後の行で表示したい値を設定する。

HubSection更新の動作例

実際に動かしてみたところ。意図したとおり、表示できている。

P.S.
roamingSettingsまわりのコードは虫だらけなので、見ないで。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2015/07/18/7710029/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。