MahAppsは、WPFでフォームやコントロールの見た目をユニバーサルアプリ風(旧メトロ風)に表示するためのUIライブラリです。
紹介はほかのサイトが詳しいと思いますが、コードがGitHubで公開されていて、紹介とドキュメントが以下のページに乗っています。
WPFのデザインを最初から作成すると大変なので「それっぽい見た目」を簡単に作るときに重宝します。
で、このMahAppsでTreeViewを使ったときの話です。
表示される見た目はこんな感じです。
原寸大表示にしてこのTreeViewItemの右側の三角形をよく見てほしいのですが
「なんかにじんで」
いるように見えませんか?
自分のエクスプローラのちょっと角が丸いですが、三角形は別ににじんでいません。
これ、実はコントロールにアンチエイリアスがかかっているせいでこうなっています。
MahAppsのコードをダウンロードしてきて
Controls.TreeView.xaml
を開き、
<Style x:Key="MetroTreeViewItem"
という部分を検索します。
そして以下のx:Name="Expander"部分をへアンチエイリアスを無効にするためのコードを追加します。
<ToggleButton x:Name="Expander" Style="{Static[f:id:Takachan:20160106230541p:plain]Resource ExpandCollapseToggleStyle}" IsChecked="{Binding Path=IsExpanded, RelativeSource={x:Static RelativeSource.TemplatedParent}, Mode=TwoWay}" ClickMode="Press" RenderOptions.EdgeMode="Aliased"/> <!-- ← 追加! -->
上記コメントの宣言を追加するだけです。
RenderOptions.EdgeMode="Aliased"
そうすると、
今度はにじまずにはっきりと表示されます。
但しこの設定少し弊害があって、TabPage切り替え時などのコントロールが移動するアニメーションで少し三角形の縦線がちらつきます。
まぁ本当によく見ていないと分からないですが…
WPFのTreeViewItemの三角形の正体は…
なんとトグルボタンだったんですね!
全く知りませんでした。
まぁ、TreeViewのテンプレート見ればわかる話ですけが(汗)
展開されたときが押されたときのONで、閉じているときがOFFだったんですね。
性質はトグルボタンっぽいです。
そういった意味でもオープンソースのコードって勉強になりますね。