DataPresenterBase クラスから派生したすべての Ultimate UI for WPF コントロールは、セル、レコード、およびフィールドの選択のサポートが組み込まれています。 SelectionType 列挙体で使用可能な 3 つの異なる選択モードがあります:
選択なし
一度に 1 つのオブジェクトを選択
一度に複数のオブジェクトを拡張選択(プログラムを使用する、または選択時にユーザーが SHIFT または Ctrl キーを押しながらマウス ボタンをクリックすることによって)。
SelectionTypeCell プロパティを Single または Extended に設定することによって、 Cell の選択を有効にする、またはこのプロパティを None に設定することによって、Cell の選択を無効にすることができます。
SelectionTypeRecord プロパティを Single または Extended に設定することによって、 Record の選択を有効にする、またはこのプロパティを None に設定することによって、Record の選択を無効にすることができます。
SelectionTypeField プロパティを Single または Extended に設定することによって、 Field の選択を有効にする、またはこのプロパティを None に設定することによって、Field の選択を無効にすることができます。 フィールド ラベルをクリックするためのデフォルト動作は Field でのソートであるため、クリックすることによってユーザーがフィールドを選択できるようにするためには、 LabelClickAction を SelectField に設定する必要があります。
以下の XAML は、xamDataGrid™ で複数の Field 選択を設定する方法を例示します。その他の選択可能なオブジェクトのタイプの手順は、DataPresenterBase クラスから派生したコントロールと似ています。Field 選択を有効にするためには LabelClickAction の変更のみが必要なことを覚えておいてください。
XAML の場合:
<igDP:XamDataGrid.FieldLayout> <!-- ここに Fields を入れます。--> <igDP:Field Name="Field1"> <igDP:Field.Settings> <igDP:FieldSettings LabelClickAction="SelectField" /> </igDP:Field.Settings> </igDP:Field> </igDP:XamDataGrid.FieldLayout> <igDP:XamDataGrid.FieldLayoutSettings> <igDP:FieldLayoutSettings SelectionTypeField="Extended" /> </igDP:XamDataGrid.FieldLayoutSettings>
フィールドを動的に作成するために AutogenerateFields が必要な場合には、プログラムによって フィールド の選択を有効にするほうがいいかもしれません。以下の FieldLayoutInitialized イベント ハンドラを DataPresenterBase 派生のコントロールに関連付けて、このタスクを完了することができます。
Visual Basic の場合:
Sub OnFieldLayoutInitialized( ByVal sender As Object, ByVal e As FieldLayoutInitializedEventArgs) Dim lo As FieldLayout = e.FieldLayout For Each f In lo.Fields f.Settings.LabelClickAction = LabelClickAction.SelectField Next lo.Settings.SelectionTypeField = SelectionType.Extended End Sub
C# の場合:
void OnFieldLayoutInitialized(object sender, FieldLayoutInitializedEventArgs e) { FieldLayout lo = e.FieldLayout; foreach (Field f in e.FieldLayout.Fields) { f.Settings.LabelClickAction = LabelClickAction.SelectField; } lo.Settings.SelectionTypeField = SelectionType.Extended; }
あらゆる選択可能な項目は、 IsSelected プロパティを持っています。Ultimate UI for WPF で、選択した項目の表示を変える(たとえば、異なる背景ブラシを使用して描画)ために、Style Trigger の Condition としてこのプロパティを頻繁に使用します。これは選択に関してユーザーが期待する視覚的フィードバックをユーザーに提供します。
では、DataPresenterBase 派生のコントロールによって公開された選択機能を説明します。上記の図で指定したプロパティとイベントを参照できます。
選択したひとつの項目または複数の項目は、コントロールの SelectedItems プロパティによってアプリケーションから常にアクセスできます。このプロパティは選択される Cells、Records、または Fields の厳密に型指定されたコレクション プロパティを公開します。
アクティブ化された項目と選択した項目の間には、理解する必要がある区別があります。ユーザーがセルまたはレコードをクリックすると、その項目はアクティブ化されます。アクティブ化によって、複数のアクティブ化イベントを、レコードで発生させることになり、その後にセルが続きます(セルがアクティブ化された場合には)。選択が有効になっている場合には、アクティブな項目は選択イベントをキャンセルしない限り選択された項目でもあります(以下を参照)。
ActiveRecord プロパティを使用して、アクティブなレコードにアクセスすることができます。そのレコード内でセルがアクティブ化された場合、 ActiveCell プロパティを使用してアクセスすることができます。 IsActive プロパティに基づいた個別の Style Trigger、またはレコーダ セレクターのいずれかを通してアクティブなオブジェクトへの注意を呼び出すことが一般的です。レコード セレクターは、 RecordSelectorLocation プロパティを使用してコントロールまたは フィールド レイアウト レベルに配置でき、 RecordSelectorStyle プロパティを使用してスタイルできます。
上記のスクリーンショットは、拡張されたレコード選択のシナリオを示しており、xamDataGrid 上のアクティブなレコードまたはレコード セレクターを強調表示しています。
より高度な選択処理のシナリオは、イベント ハンドラを SelectedItemChanging イベントと SelectedItemChanged イベントに関連付けることによって処理できます。選択が有効で選択されたひとつまたは複数の項目が変わった時にはすべての DataPresenterBase 派生のコントロールが発生する必要があります。
たとえば、SelectedItemChanging イベントを処理して NewSelection を検証することができます。アプリケーションの現在の状態でどの項目の選択が許可されるかを制限するビジネス ルールを評価した後で、 Cancel を True に設定することによって選択をキャンセルできます。
DataPresenterBase 派生のコントロールの選択インフラストラクチャは、インターフェイスの背後で抽象化されており、最も高度な選択シナリオを処理するために使用できます。このトピックで学習したすべての選択可能な項目(セル、レコード、およびフィールド)は、 ISelectableItem インターフェイスを実装しており、これによって、コントロールインフラストラクチャによって選択可能にすることができます。DataPresenterBase クラスは、ISelectionHost のプレゼンテーションの意味に基づいて、ドラッグ、きめの細かい ISelectableItem (セルなど) をきめの粗い ISelectableItemand (レコードなど)に変換する、一度の複数ページにわたる範囲選択の間の自動スクロールの速度を含む、選択のより繊細な側面の多くを担当する ISelectionHost インターフェイスを実装します。
xamDataGrid の選択レコードをクリアするには、CTRL を押しながら選択レコードをクリックします。