WPFの標準コントロールテンプレートはまだこなれてないというか、
ControlTemplateをいじって問題を解決しなきゃいけない場面がある。
ListView のカラムヘッダの幅を固定するとか、
Horizontal stretch on TreeViewItems とか。
……で、上記のページでは解決法が示されてるんだけど、
これだとTemplateを丸ごと置き換えなきゃいけない。
そうすると、イチからアプリケーションテーマを作りこんでるならともかく、
標準テーマでやってる場合はシステムのほかの部分のコントロールから
見た目が浮いてしまう。
テンプレートは標準のままで、問題になってる一部分を修正して使いたい。
……というわけで、だいぶ限定的だけど、そんな感じのものを作った。
TemplateOperation.csこれで提供される TemplateOperation.AddStyle 添付プロパティを使って
<GridViewColumnHeader>
<TemplateOperation.AddStyle>
<ResourceDictionary>
<Style x:Key="PART_HeaderGripper">
<Setter Property="Control.Visibility"
Value="Collapsed" />
</Style>
</ResourceDictionary>
</TemplateOperation.AddStyle>
</GridViewColumnHeader>
と書くと、テンプレート内の "PART_HeaderGripper"要素を
非表示にするのでユーザーは列サイズを変更できなくなる。
……ま、テンプレートの要素名がいつも同じとは限らないわけだが
少なくとも現在PresentationFrameworkにくっついてる標準Templateでは
どのテーマも同じ名前を各要素につけてるから大丈夫なはず。
※ AeroとClassicしか試してない
たぶん
MSDNのサンプルテーマは標準テーマと同じ内容のはずで、
これを基に作った多くのアプリケーションテーマでもそれなりに利用できる、といいなあ。
以下利用サンプルzip.(拡張子変えてアップしてる)
XAMLUtil.mp3
テーマ:プログラミング - ジャンル:コンピュータ
- 2009/09/12(土) 00:41:14|
- WPF
-
| トラックバック:0
-
| コメント:0