メトロっぽいカスタムボタンを XAML で作る

執筆日時:

f:id:daruyanagi:20120917231926p:plain

StandardStyles.xaml はお宝の宝庫や! という話を前回(Common フォルダをチラ見してみる - だるろぐ)少しした。たとえば、ボタンなんかはほとんど自分で作る必要がないぐらい、豊富に取り揃えられている。

けれど、それでも足りない場合があるかもしれない。おれは足りなかった。燃費記録用の Windows ストアアプリを作ってみた - だるろぐ に使う「ガソリン」アイコンのボタンがほしい! なんでないんだっ? レドモンドは何をしているっ!

そこでふと、死んだじいちゃんの言葉を思い出した。「なければ自分で作れ」。そうだ、じいちゃん。作ってみるよ、おれ!

まずは偵察

<Style x:Key="FourBarsAppBarButtonStyle"
       TargetType="ButtonBase"
       BasedOn="{StaticResource AppBarButtonStyle}">
<Setter Property="AutomationProperties.AutomationId"
            Value="FourBarsAppBarButton"/>
<Setter Property="AutomationProperties.Name"
            Value="Four Bars"/>
<Setter Property="Content" Value="&#xE1E9;"/>
</Style>

これは StandardStyles.xaml で定義されている「バリ4」アイコンのソース。AppBarButtonStyle を継承していて、AutomationProperties.AutomationId、AutomationProperties.Name、Content の3つのプロパティを書き換えているのがわかる。

ちなみに、AppBarButtonStyle のコードは読む気が起きなかった。たぶん、Content を丸で囲って、下にテキストを追加する、みたいなことをやっているのだろう。知らんけど。

Content は文字の実態参照(っていうんだっけ?)で、AppBarButtonStyle はそれを Segoe UI Symbol で描画しているらしい。へぇ、あのアイコンの絵って、全部フォントだったんだ。

AutomationProperties はアイコンの下にでてくるテキストに関係があるみたい。試しに空にしてみたらテキストが消えた。

これでだいたい偵察が済んだ。簡単にカスタマイズできそうだ。

適当にカスタマイズしてみる

f:id:daruyanagi:20120918001039p:plain

まず、文字コード表から目的の文字を探す。あった! たいていのモノはありそうだな。

次に文字コードをもとにさきほどのスタイルをコピペして魔改造する。

f:id:daruyanagi:20120918001322p:plain

んで、実際にバインドして使ってみる。

f:id:daruyanagi:20120918001358p:plain

サークルが、消えている! (;゚Д゚) ナゼダ!

f:id:daruyanagi:20120918001514p:plain

なんか、FlowLayout を RightToLeft にしていると消えてしまうみたい。理由まで調べるのは面倒だったけど、既定通り LeftToRight に戻したらサークルが出た。

これを応用したらボタンを腐るほど量産できるな!

おまけ

f:id:daruyanagi:20120918002004j:plain

もっとボタンがほしければ、こういうのもある。有名ソフトのアイコンまでカバーされていていい感じ。

米Syncfusion、“Metro”アイコンの作成ソフト「Metro Studio 2」を正式公開 - 窓の杜