dataManager.DialogFactory = New MyScheduleDialogFactory()
このトピックは、xamSchedule コントロールのユーザー アクティビティ ダイアログと、カスタム ダイアログの作成方法を説明します。
トピックは以下のとおりです。
概要
組み込みダイアログ
カスタム ダイアログ
カスタム ダイアログの指定
コード例
既存のダイアログのカスタマイズ
使用されるメソッド
組み込みダイアログに戻す
カスタム ダイアログのコンテンツを提供
「軽量」ダイアログと「フル機能」ダイアログ
「軽量」ダイアログと「フル機能」ダイアログの例
フル機能ダイアログと軽量ダイアログの切り替え
ダイアログの表示
関連トピック
Infragistics xamSchedule コントロールはダイアログ ベースのユーザー操作を堅牢にサポートします。標準の組み込みダイアログだけでなく、カスタム ダイアログを作成するための機能を使用できます。
標準の組み込みダイアログは xamSchedule コントロール アセンブリで定義され、追加のアセンブリを一切参照することなく使用できます。これらのダイアログはリソース使用の観点から効率的になるよう設計されており、それ自体はユーザー インターフェイス (UI) を表示するために追加の外部アセンブリを参照しません。ただし、xamSchedule は必要とされるコントロールおよび機能の両方またはいずれか一方を含むその他のアセンブリを参照するカスタム ダイアログを使用するためのメカニズムを提供します。
表 1 に xamSchedule と共に提供される組み込みダイアログおよびそれらのユーザー操作をリストします。
コントロール アーキテクチャによって開発者は上記の組み込みダイアログの代わりに xamSchedule コントロールによって使用されるカスタム ダイアログを指定できます。カスタム ダイアログを提供するには、以下の通りに実行します。
最初に、 ScheduleDialogFactoryBase から継承するクラスを作成し、置き換えたいダイアログを提供するためのひとつ以上のメソッドをオーバーライドします。
次に、 XamScheduleDataManager で DialogFactory プロパティを作成したクラスのインスタンスに設定します。
Visual Basic の場合:
dataManager.DialogFactory = New MyScheduleDialogFactory()
C# の場合:
dataManager.DialogFactory = new MyScheduleDialogFactory();
注:
組み込みダイアログの使用を元に戻すには、dataManager.DialogFactory プロパティを null に設定するだけです。
カスタム バージョンの特定のダイアログは、オーバーライドできる多数の仮想メソッドを公開する抽象的な ScheduleDialogFactoryBase クラスと共に実装できます (表 2)。
Appointments を編集するためのカスタム ダイアログを提供するために、
このサンプル コードで ScheduleDialogFactory 派生クラスを作成します。
Visual Basic の場合:
Public Class MyCustomScheduleDialogFactory Inherits ScheduleDialogFactoryBase Public Overrides ReadOnly Property SupportedActivityDialogTypes() _ As ActivityTypes Get Return ActivityTypes.Appointment End Get End Property Public Overrides Function CreateActivityDialog(container As _ FrameworkElement, dataManager As XamScheduleDataManager, _ activity As ActivityBase, allowModifications As Boolean, _ allowRemove As Boolean) As FrameworkElement Select Case activity.ActivityType Case ActivityType.Appointment If True Then ' ダイアログのコンテンツを ' 表す要素を作成します Return GetMyCustomDialog() End If Case Else If True Then ' サポートされないアクティビティ タイプに null を返します Return Nothing End If End Select End Function End Class
C# の場合:
public class MyCustomScheduleDialogFactory : ScheduleDialogFactoryBase
{
public override ActivityTypes SupportedActivityDialogTypes
{
get { return ActivityTypes.Appointment; }
}
public override FrameworkElement CreateActivityDialog(
FrameworkElement container,
XamScheduleDataManager dataManager,
ActivityBase activity,
bool allowModifications,
bool allowRemove)
{
switch (activity.ActivityType)
{
case ActivityType.Appointment:
{
// ダイアログのコンテンツを
// 表す要素を作成します
return GetMyCustomDialog();
}
default:
{
// サポートされないアクティビティ タイプに null を返します
return null;
}
}
}
}
組み込みダイアログの使用を元に戻すには、XamScheduleDataManager DialogFactory プロパティを null に設定するだけです。
上記の例で、コードは GetMyCustomDialog() という名前のメソッドを呼び出します。メソッドの名前は開発者の判断で決定します。カスタム ダイアログのコンテンツを表す FrameworkElement 派生クラスを作成して返す必要があります。どの要素を返すのかという観点から 2 つの基本的なオプションがあります。
アプリケーションが実行するプラットフォーム (つまり Silverlight、WPF または WPF/XBAP) に適切な Window を返します。これにはカスタム ダイアログのユーザー インターフェイス (UI) を表示するために必要なすべての要素を含みます。
ダイアログの要素を含む非ウィンドウの FrameworkElement 派生クラスを返します。xamSchedule はアプリケーションが実行するプラットフォームに適切な最上位のウィンドウにホストすることを担当します。
[予定] ダイアログまたは [ActivityRecurrence] ダイアログの代替えとしてカスタムダイアログを作成している場合には、これらのかなり複雑なダイアログを完全に実装するために必要とされる膨大な作業を軽減するために AppointmentDialogCore クラスと ActivityRecurrenceDialogCore クラスの両方またはいずれか一方の使用を検討したい場合があります。これらの 2 つのクラスは、コントロールから派生しており、各ダイアログに含まれている機能の大半を実装します。
注:
以下の段落で AppointmentDialogCore への参照は TaskDialogCore と JournalDialogCore にも適用されます。3 つのクラスはすべて、3 つの全ダイアログでサポートされる共通のビヘイビアーと機能のためのロジックを含む、抽象基本クラス ActivityDialogCore から派生します。
AppointmentDialogCore の場合、このコントロールのデフォルトの Style には、Ribbon を除き、組み込み [予定] ダイアログに含まれるすべてのダイアログ要素が含まれます (ただし、Ribbon のようなナビゲーション コントロールを配置できるタイプ ContentControl の NavigationControlSite プロパティを公開します)。ActivityRecurrenceDialogCore の場合、このコントロールのデフォルトの Style には、組み込みの ActivityRecurrenceDialog に含まれるすべてのダイアログ要素が含まれます。
これらのコントロールを使用できる方法は 2 通りあります。ひとつのアプローチは、カスタム ダイアログで Core クラスのいずれかのインスタンスを作成してその周りにその他のダイアログ要素を追加することです。もうひとつの方法は、ニーズに合わせてコントロールをフォーマットする Style を作成することです。
コントロールを使用することの主なメリットは、一般的なダイアログの環境を処理するコマンドに加えてテンプレート内でバインドできる公開されたビュー モデル プロパティを利用できることです。コントロールによって公開されるコマンドは以下の通りです。
ActivityDialogCore コマンド (3つの全アクティビティ ダイアログに適用 - AppointmentDialogCore、TaskDialogCore、JournalDialogCore) :
ActivityDialogCoreSaveAndCloseCommand - データ ソースを適切に更新するために適切な XamScheduleDataManager データ編集メソッド (つまり、 BeginEdit、 EndEdit、 CancelEdit) を使用して、修正された予定データを保存し、ダイアログを閉じます。
ActivityDialogCoreCloseCommand - 必要な場合にユーザーに保存オプションをプロンプトしてからダイアログを閉じます。
ActivityDialogCoreDisplayRecurrenceDialogCommand - 編集される予定の ActivityRecurrenceDialog を表示します。
ActivityDialogCoreShowTimeZonePickersCommand - テンプレートのコントロールがバインドできる AppointmentDialogCore. TimeZonePickerVisibility プロパティを設定します。
ActivityDialogCoreHideTimeZonePickersCommand - テンプレートのコントロールがバインドできる AppointmentDialogCore.TimeZonePickerVisibility プロパティを設定します。
ActivityRecurrenceDialogCore コマンド:
RecurrenceDialogCoreSaveAndCloseCommand - 修正された繰り返しデータを編集される予定に保存します。
RecurrenceDialogCoreCloseCommand - 修正した Recurrence データを破棄してダイアログを閉じます。
RecurrenceDialogCoreRemoveRecurrenceCommand - 非繰り返しの予定となった、繰り返しデータを編集される予定から削除して、ダイアログを閉じます。
xamSchedule コントロールのフットプリントで組み込みアクティビティ (予定、タスク、履歴) ダイアログの影響を最小限に抑えるために、参照を必要としないように、または追加のコントロールを含むその他のアセンブリをロードするように設計されています。
リボン コントロールを通常含んでいる [アクティビティ] ダイアログの場合、組み込みバージョンのダイアログには、Application Menu、Quick AccessToolbar、RibbonGroups の縮小のような高度な機能はありませんが、「本物」のリボン コントロール (たとえば、XamRibbon) の基本的な外観と機能を持つカスタムの「シミュレートされた」リボンが含まれています。その結果、組み込みの [予定]、[タスク] および [履歴] ダイアログを使用する時に追加のアセンブリを必要としません。
ほとんどのアプリケーションは、この「シミュレートされた」リボンがある [アクティビティ] ダイアログで十分です。とりわけ、ランタイムにロードしなければならないアセンブリの数を削減することを重視しているアプリケーションには十分です。
フル機能のリボン アクティビティ ダイアログを必要とするアプリケーションのニーズに対応するために、xamSchedule には、組み込みの「軽量の」[予定] ダイアログで使用される「シミュレートされた」リボン コントロールの代わりに、ダイアログの UI で xamRibbon コントロールを使用する「フル機能」バージョンのダイアログが含まれています。以下は軽量バージョンのダイアログとフル機能バージョンのダイアログの例です。
Visual Basic の場合:
dataManager.DialogFactory = Nothing
C# の場合:
dataManager.DialogFactory = null;
図 1: 軽量の [予定] ダイアログ
図 2: 軽量の [タスク] ダイアログ
図 3: 軽量の [履歴] ダイアログ
このバージョンのアクティビティ ダイアログは XamRibbon コントロールを使用し、別の NuGet パッケージで提供されます。
Infragistics.WPF.Schedules.Dialogs
フル機能のアクティビティ ダイアログを使用するには、プロジェクトに適切な NuGet パッケージへの参照を追加して、以下のように XamScheduleDataManager DialogFactory を設定します。
Visual Basic の場合:
dataManager.DialogFactory = _
New Infragistics.Controls.Schedules.ScheduleDialogFactory()
C# の場合:
dataManager.DialogFactory =
new Infragistics.Controls.Schedules.ScheduleDialogFactory();
図 4: フル機能 [予定] ダイアログ
図 5: フル機能の [タスク] ダイアログ
図 6: フル機能の [履歴] ダイアログ
注:
カスタム ダイアログのために上記の標準の ScheduleDialogFactoryBase 派生クラス アプローチを使用して、「フル機能」の [予定] ダイアログ アセンブリが実装されます。
定期的な予定ダイアログは、ユーザーが任意のアクティビティ ダイアログで繰り返しボタンを押したときに表示されます。
定期的な予定ダイアログは、以下の画像のように定期的な予定の説明を強調表示して示すことができます。
定期的な予定の表示は以下の手順で構成できます。
プロジェクトの既存または新しいリソース ファイル (.resx file) で文字列のリソースを作成します。
文字列リソースの名前を "DLG_Recurrence_ShouldShowRecurrenceDescription" に設定します。
文字列リソースの値を表示の要件に基づいて "true" または " に設定します。
"InitializeComponent()" 呼び出しの前のメイン ウィンドウのコンストラクターに以下の行を含みます (このリソースを登録することにより、xamSchedule ビューすべての定期的な予定ダイアログが影響されます)。
Visual Basic の場合:
XamDayView.RegisterResources("NameSpace.ResourceClassName", GetType(MainWindow).Assembly)
C# の場合:
XamDayView.RegisterResources("NameSpace.ResourceClassName", typeof(MainWindow).Assembly);
注:
リソース ファイルが位置する名前空間を "Namespace" で置き換えると、リソース ファイル名前で "ResourceClassName" を名前で置き換えて、メイン ウィンドウのクラス名で "MainWindow" を置き換えます。
注:
定期的な予定の説明は、英語、ドイツ語、フランス語を使用した場合にデフォルトで表示されますが、スペイン語と日本語では表示されません。
xamSchedule コントロールは、ユーザーによるコントロールの操作に基づいて (xamDayView でタイムスロットをダブルクリックする時など)、このトピックで説明しているさまざまなダイアログを自動的に表示します。その結果、xamSchedule コントロールを通常操作する間にダイアログが必ず表示するためにコードを記述する必要はなくなります。
ただし、アプリケーションで、アプリケーションの UI のその他の部分の操作に基づいてダイアログを表示する必要がない場合、手動で表示する方法があります。ダイアログを表示するには、XamScheduleDataManager クラスの以下のメソッドを使用できます。