WinRT XAML Toolkitのコントロールをデザイン画面に配置する

WinRT XAML Toolkitのコントロールをデザイン画面に配置する

では、デザイン画面上にWinRT XAML Toolkitのコントロールを配置しましょう。今回は、先のサンプルでTextBlockコントロールを使っていた代わりに、WinRT XAML ToolkitのCascadingTextBlockを使用します。

CascadingTextBlockは、必要に応じて標準的な位置から落下しつつフェードアウトやフェードインを繰り返しながら、個々の文字をアニメーション化するコントロールです。

デザイン画面上にCascadingTextBlockを配置するとコントロールエラーが表示されます。ひとまずエラーを無視してプロパティを設定しましょう。「名前」にはCascadingTextBlock1、[ブラシ]ペインのForeground(文字色)にはCrimson、[テキスト]ペイン内の「書体」にはMeiryo UI、「文字サイズ」には直接値を打ち込んで80とし、最後に太字にしておきます。[その他の設定]ペイン内にある「AnimatedOnloaded」にチェックを付け、「CascadeIn」と「CascadeOut」にもチェックしておきましょう(図15)。「AnimatedOnloaded」や「CascadeIn」と「CascadeOut」にチェックを付けていないとアニメーションが実行されないので注意してください。

図15 CascadingTextBlockのプロパティを設定する
図15 CascadingTextBlockのプロパティを設定する

いつものように、Grid要素をViewBox要素で括り、Grid要素のBackgroundプロパティを削除します。XAMLコードはリスト5のようになります。

リスト5 CascadingTextBlockを指定したXAMLコード

(1)WinRT XAML Toolkitのコントロールを追加すると、自動的にControlsという名前空間が追加されます。

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:AnimationTimer"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Controls="using:WinRTXamlToolkit.Controls"■(1)
    x:Class="AnimationTimer.MainPage"
    mc:Ignorable="d">
    <Viewbox>
    <Grid>
        <Controls:CascadingTextBlock x:Name="CascadingTextBlock1" HorizontalAlignment="Left" Height="363" Margin="96,0,0,0"
         VerticalAlignment="Top" Width="1165" FontFamily="Meiryo UI" FontSize="80" CascadeOut="True"  AnimateOnLoaded="True" FontWeight="Bold" Foreground="Crimson"/>
15:     </Grid>
16:   </Viewbox> </Page>

なお、VS2013のXAML上では、CascadingTextBlock要素の下に波線が引かれて、「XML Parsing Failed」というエラーが表示されていますが、これは無視して構いません。

またデザイン画面には図16のようにエラーが表示されています。

図16 CascadingTextBlockのデザイン画面におけるエラー
図16 CascadingTextBlockのデザイン画面におけるエラー

では、プログラムコードを書いていきましょう。

プログラムコード

ソリューションエクスプローラー内のMainPage.xamlを展開して、MainPage.xaml.vbを表示します。このファイルをダブルクリックしてコードエディターを起動します。

第2回で解説した方法でリスト6のコードを生成します。ページがアクティブになった時のコードです。

リスト6ページがアクティブになった時のコード

Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
        MyBase.OnNavigatedTo(e)
    End Sub

リスト6の中にリスト7のようなコードを記述します。

リスト7 アニメーションを伴って時刻を表示するコード

Public NotInheritable Class MainPage
    Inherits Page
    Protected Overrides Sub OnNavigatedTo(e As NavigationEventArgs)
        Dim myTimer As New DispatcherTimer
        CascadingTextBlock1.Text = DateTime.Now.ToString
        myTimer.Interval = New TimeSpan(0, 0, 10)
        AddHandler myTimer.Tick, Sub()
                                     CascadingTextBlock1.AnimateOnLoaded = True
                                     CascadingTextBlock1.Text = DateTime.Now.ToString
                                     CascadingTextBlock1.BeginCascadingTransitionAsync()
                                 End Sub
        myTimer.Start()
        MyBase.OnNavigatedTo(e)
    End Sub
End Class

ほとんどが、最初のTextBlockに時刻を表示させた処理と同じです。TextBlockがCascadingTextBlockに変わったと思えば良いでしょう。Tickイベントの中で、CascadingTextBlock1.AnimateOnLoaded = Trueと記述してアニメーションを有効化しています。また、BeginCascadingTransitionAsyncメソッドはCascadingTextBlockのアニメーションを実行するメソッドです。

先のサンプルでDateTime.Now.ToString(“yyyy年mm月dd日hh時mm分ss秒)とTextBlockに指定すると、時刻が「年月日時分秒」で表示されました。しかし、CascadingTextBlockにこの書式を使用するとエラーになります。どうも日本語表記には対応していないようなので注意してください。

また今回は、アニメーションの実行を完結させるために、Intervalは10秒間隔を指定しています。5秒間隔等にすると、アニメーションが完結しないで、次の時刻が表示されてしまいます。

実行すると図17のようにアニメーションを伴って時刻が表示されます。

図17 アニメーションを伴って時刻が表示される
図17 アニメーションを伴って時刻が表示される

今回はこれで終了です。タイマーを使った時刻表示のサンプルを2つ紹介しました。ここではタイマーの使い方を知ってもらえれば良いでしょう。2つ目に紹介したWinRT XAML Toolkitを使ったアプリは、どうしてもコントロールエラーが表示されてしまいます。実行には問題ないが、Windows ストアの審査では落ちてしまうので注意が必要です。

次回は、Webカメラを使ったサンプルを紹介します。これまでは短いコードでしたが、次回からは少しコードが長めになります。では、おたのしみに。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30