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>

WPF FAQ の目次に戻る