Ultimate UI for WPF 製品では、UI コントロール内部のテンプレートで定義されている要素を取得するヘルパーメソッドを提供しています。
- GetAncestorFromName メソッド
- GetAncestorFromType メソッド
- GetDescendantFromName メソッド
- GetDescendantFromType メソッド
GetAncestorXXX は起点となる要素の親方向に向かって要素を探します。GetDescendantXXX は起点となる要素の子孫方向に向かって要素を探します。
Style 設定では実現が難しい要件においては、これらヘルパーメソッドを活用してテンプレート内部の要素にアクセスしましょう。
例えば、XamTabControl のタブの閉じるボタンに対応するツールチップを見てみましょう。閉じるボタンはテンプレート内に CloseButton という名前で定義されています。
ただし、XamTabControl では CloseButton をプロパティとしては公開していないため、XamTabControl から辿ってアクセスすることはできません。そこで、GetDescendantFromName メソッドを利用して CloseButton へアクセスしてみます。GetDescendantFromName メソッドの第一引数は、起点となるタブ(TabItemEx)を指定しています。
private void XamTabControl_Loaded(object sender, RoutedEventArgs e) { var tabControl = sender as XamTabControl; var tab = tabControl.Items[0] as TabItemEx; var button = Infragistics.Windows.Utilities.GetDescendantFromName(tab, "CloseButton") as Button; button.ToolTip = "カスタム文字列"; }
実行結果
タブ内の閉じるボタンにアクセスし、ツールチップを変更することができました。