かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Universal Windows Platform appのタイル

UWP appではタイルの自由度が上がっています。どれくらい上がってるかというと、以下のページにあるようにXML自由に書けるぜヒャッハーっていうくらいです。

Adaptive Tile Templates - Schema and Documentation - Tiles and Toasts - Site Home - MSDN Blogs

ただし、これを手で組み立てるのはたまったもんじゃないです…ということで、Windows Runtime向けにNotificationsExtensionsというライブラリが提供されていたように、UWPでもNotificationsExtensions.Win10というライブラリが提供されました!これで勝つる。

使い方はとても簡単です。上記ページにあるXMLをそのままオブジェクトに落とし込んだように書けます。

var bindingContent = new TileBindingContentAdaptive
{
    PeekImage = new TilePeekImage
    {
        Source = new TileImageSource("Assets/Square150x150Logo.png")
    },
    Children =
    {
        new TileText { Text = "Hello world", Style = TileTextStyle.Title },
        new TileText { Text = "okazuki", Style = TileTextStyle.Body },
    }
};

var tileBinding = new TileBinding
{
    Branding = TileBranding.NameAndLogo,
    Content = bindingContent,
    DisplayName = "Hello display name",
};

var content = new TileContent
{
    Visual = new TileVisual
    {
        TileSmall = tileBinding,
        TileMedium = tileBinding,
        TileLarge = tileBinding,
        TileWide = tileBinding,
    }
};

var n = new TileNotification(content.GetXml());
TileUpdateManager.CreateTileUpdaterForApplication()
    .Update(n);
var bindingContent = new TileBindingContentAdaptive
{
    PeekImage = new TilePeekImage
    {
        Source = new TileImageSource("Assets/Square150x150Logo.png")
    },
    Children =
    {
        new TileText { Text = "Hello world", Style = TileTextStyle.Title },
        new TileText { Text = "okazuki", Style = TileTextStyle.Body },
    }
};

var tileBinding = new TileBinding
{
    Branding = TileBranding.NameAndLogo,
    Content = bindingContent,
    DisplayName = "Hello display name",
};

var content = new TileContent
{
    Visual = new TileVisual
    {
        TileSmall = tileBinding,
        TileMedium = tileBinding,
        TileLarge = tileBinding,
        TileWide = tileBinding,
    }
};

var n = new TileNotification(content.GetXml());
TileUpdateManager.CreateTileUpdaterForApplication()
    .Update(n);

これで、タイルが出来ます。簡単ですね。

ソース

一応ソース置いときます。

github.com