スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

Template内のコントロールを検索する。

もう何度か書いてしまっているけども、カスタムコントロールや標準のコントロールは何かしらのテンプレートが適用されている。標準では提供されていない細かい事をしようと思うと、このテンプレート内のコントロールを検索して、イベントにハンドラメソッドを登録したり、目的のプロパティとバインディングする必要が出てくる。
ただ、このテンプレートって、実行時にも切り替えが可能だったりするので、一回取ったら終わり、とするわけには行かない。なので、OnApplyTemplateという、テンプレート適用時のメソッドをオーバーライドして、その都度削除したり取得したりする必要がある。
/// <summary>
/// テンプレート適用時の処理です。
/// </summary>
public override void OnApplyTemplate() {
//旧のTemplateに対しての削除処理

base.OnApplyTemplate();

if (this.Template != null) {
//新テンプレートに対する追加処理
}

return;
}
で、テンプレート内のコントロールを探すにもまずここで実行してみると便利かなと。
探し方は、Templateが持つFindNameメソッドで探すだけ。

//固定部のGridパネル
var panel = this.Template.FindName("PART_XXXXXXXX", this) as Grid;

第1引数がコントロール名で、第2引数がTemplateの親(持ち主)となる。メソッドは簡単なんだけど、問題は、テンプレート内のコントロールのがどういう名前で定義されているか、だったりする。
例えば、DatePickerで、IMEをOFFにする。で扱ったDatePicker内にあるTextBoxは、「PART_TextBox」という名前を持っている。
テンプレート内コントロール名の探し方は、2つある。他にあれば追記していく。

①定義参照で探す。
件のDatePickerなんかは、DatePickerへカーソルを持って行って、「定義を参照」とすると、以下のように出てくる。
namespace System.Windows.Controls
{
// 概要:
// ユーザーが日付を選択できるコントロールを表します。
[TemplatePart(Name = "PART_Popup", Type = typeof(Popup))]
[TemplatePart(Name = "PART_Root", Type = typeof(Grid))]
[TemplatePart(Name = "PART_TextBox", Type = typeof(DatePickerTextBox))]
[TemplatePart(Name = "PART_Button", Type = typeof(Button))]
public class DatePicker : Control

TemplatePartという属性は、テンプレートに名前(Nameやx:Name)を持つコントロールを示している。
PART_TextBoxという名前のコントロールは、DatePickerTextBoxというクラスであることがわかる。他にもポップアップやボタンが有ることがわかる。

②ソースコードを探す。できればXAML。
①でわからなかったのがDataGrid。定義参照してみたけど、TemplatePartが定義されてない。TemplatePartって、必須設定ではないんだね…Orz。結局、こういう場合は、ソースコードやテンプレートが定義されたリソース(XAML)、WPF4の書籍を探すしかない。書籍はTemplateに関する章周辺に掲載されている可能性が高い。DataGridは、WPF Toolkitのソースコードを探して見つけた。

細かいカスタマイズにはそれなりの苦労があるが、Windows.Formsに比べたらはるかにマシなのが、WPFの利点の一つかなと思えた。実際サードパーティ製品を購入しなくても、ある程度の事(Windows.Formsではできなかった事)ができてるしな。パフォーマンスはWindows.Forms以上に気を使う必要があるけど。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。