Q094. XamDataGrid で 「フィールドの選択」 のタイトルを変更するには?
A.「フィールドの選択」 のタイトルは通常変更することができません。しかし FieldChooser のインスタンスを取得し、Parent の ToolWindow.Title を設定すれば変更が可能です。
以下、サンプルです。前回はコードビハインドで実装しましたが、今回はインタラクション・トリガーを使いました。なおこのサンプルをビルドするには、Blend SDK に含まれる System.Windows.Interactivity.dll を参照設定に追加する必要があります。
関連記事 : 連載:WPF入門:第10回 WPFの「入力イベントとアニメーション」を学ぼう (2/2)
関連記事 : MVVMパターンでコマンドの実行前に確認ダイアログとか出したくない?
まずインタラクション・トリガーを用意します。TriggerBase<T> を継承したクラスを用意し、XamDataGrid.FieldChooserOpening イベントで FieldChooser のインスタンスを取得、Parent の Parent の ToolWindow の Title を設定するよう実装します。タイトルも依存関係プロパティで変更できるよう実装します。
XamDataGridFieldChooserOpeningTrigger.cs
using System.Windows; using System.Windows.Interactivity; using Infragistics.Windows.DataPresenter; using Infragistics.Windows.DataPresenter.Events; namespace WpfApplication1 { public class XamDataGridFieldChooserOpeningTrigger : TriggerBase<XamDataGrid> { public static readonly DependencyProperty TitleProperty = DependencyProperty.Register( "Title", typeof(string), typeof(XamDataGridFieldChooserOpeningTrigger), new UIPropertyMetadata("フィールドの選択") ); public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } protected override void OnAttached() { base.OnAttached(); AssociatedObject.FieldChooserOpening += OnFieldChooserOpening; AssociatedObject.Unloaded += AssociatedObject_Unloaded; } protected override void OnDetaching() { base.OnDetaching(); AssociatedObject.FieldChooserOpening -= OnFieldChooserOpening; AssociatedObject.Unloaded -= AssociatedObject_Unloaded; } void OnFieldChooserOpening(object sender, FieldChooserOpeningEventArgs e) { var grid = AssociatedObject as XamDataGrid; if (grid != null && e.FieldChooser != null) { // ツールウィンドウのタイトルを変更 ((Infragistics.Windows.Controls.ToolWindow)e.FieldChooser.Parent).Title = this.Title; } } void AssociatedObject_Unloaded(object sender, RoutedEventArgs e) { this.OnDetaching(); } } }
XAML です。インタラクション・トリガーを Interaction.Triggers に登録します。このサンプルではタイトルを 「てすと」 に変更してます。
<igDP:XamDataGrid BindToSampleData="True" > <igDP:XamDataGrid.FieldLayoutSettings> <igDP:FieldLayoutSettings HeaderPrefixAreaDisplayMode="FieldChooserButton" /> </igDP:XamDataGrid.FieldLayoutSettings> <i:Interaction.Triggers> <local:XamDataGridFieldChooserOpeningTrigger Title="てすと" /> </i:Interaction.Triggers> </igDP:XamDataGrid>