バージョン

Outlook 2007 カラー スキームでの作業

概要

Ultimate UI for Windows Forms 2006 Volume 3 リリースは、WinSchedule の Office2007 ルック アンド フィールをサポートします。Outlook2007 は、Outlook の以前のバージョンよりも広範囲のカレンダー特有のカラー スキームを使用します。スクリーンショットで分かるように、実質的にすべての視覚的エレメントがカレンダー(または、WinSchedule 用語では、Owner)に特有のカラー スキームに基づくカラーでレンダリングされます。

WinSchedule Working with the Outlook 2007 Color Scheme 01.png

さまざまなカレンダーの視覚的表現に対する新しいアプローチをサポートするために、WinSchedule は Outlook2007 カラー スキームの概念を紹介します。Outlook2007 カラー スキームは一色に基づき、この一色のさまざまな異なるシェードを使用することによって、各コントロールの視覚的エレメントで使用されるすべての色が自動的に生成されます。これは MS Outlook2007 と同じ視覚的外観を反映します。

Infragistics 外観モデルに馴染みのある開発者は、視覚的エレメントの色がこのモデルの使用を通して高度にカスタマイズ可能であることが分かります。このモデルは、カスタマイズの補足的レイヤを提供しているアプリケーション スタイリングの導入で NAS2006 Volume 2 リリースで拡張されました。Outlook 2007 カラー スキーム モデルは、前述のモデルの両方と関連して機能します。特定の外観(またはアプリケーション スタイリング)設定がない場合、視覚的なエレメントに色を付けるために使用されるデフォルト値は Outlook2007ColorScheme クラスのインスタンスから取得されます。このクラス、そしてこのドキュメントの以降のセクションでどのように機能するかを詳細に述べます。

WinSchedule コントロール用に感動的な外観の作成でグラフィック アーティストを支援するためにアプリケーション スタイリング モデルが設計されましたが、Outlook2007 カラー スキーム モデルは、表示で各カレンダーに異なる色の指定を希望する開発者のために設計されていました。しかし、開発者は徹底した外観主導のコーディングに常に付随する「不満な作業」の一部を担当したいとは思いません。Outlook2007 カラー スキーム モデルは、外観プロパティを設定したり、アプリケーション スタイリングのメカニズムを使用せずに、スクリーンショットで見られるような外観を可能にします。

Outlook2007ColorSchemes コレクション

Outlook2007 は 15 の異なるカラー スキーム(右側のスクリーンショットを参照)のサポートを提供し、[カレンダー オプション] ダイアログから使用できるようになっています。WinCalendarLook は、これらのカラー スキームを Outlook2007ColorSchemes コレクションから公開します。このコレクションには、Outlook2007ColorScheme クラスの 15 のインスタンスが含まれ、各インスタンスは [カレンダー オプション] ダイアログで見られる 15 色のひとつに対応します。このコレクションのインデクサは、System.Drawing.Color のタイプです。これらのスキームの各色は、SupportedColors プロパティからも公開され、このプロパティは、それが対応するカラー スキームと同じ序数位置で示される配列の各色で、System.Drawing.Color 構造の配列を返します。

WinSchedule Working with the Outlook 2007 Color Scheme 02.png

Office2007 に馴染みのある開発者は、青、黒、およびシルバーをサポートする 2 つの異なる「テーマ」に気づくでしょう。これらのテーマは、静的な Infragistics.Win.Office2007ColorTable.ColorScheme プロパティから Infragistics フレームワークで実現されます。これは、指定されたアプリケーションのすべての Infragistics コントロールで Office 2007 テーマを決定する設定可能なプロパティで、WinSchedule コントロールも例外ではありません。Outlook2007ColorSchemes コレクションは DefaultScheme プロパティを公開します。これは、ColorScheme プロパティの現在値に対応するカラー スキームを返します。DefaultScheme によって返されるカラー プロパティは常に ColorScheme プロパティの現在値を反映します。

WinSchedule Owner が表示されると、カラー スキームは 15 の使用できるカラー スキームのプールから自動的に割り当てられます。これらの 15 のカラー スキームしか存在しないのに WinSchedule は Owners の無制限の数の表示をサポートするので、複数の Owner が同じカラー スキームを指定する可能性があります。特別な Owner にカラー スキームを予約するための機能が存在します。Outlook2007ColorSchemeCollection クラスは DisallowAutoAssignment メソッドを公開します。これは、自動的に割り当て可能なカラー スキームのプールから指定されたものを削除します。

Outlook2007ColorScheme クラス

Outlook2007ColorScheme クラスは、タイプ System.Drawing.Color の複数のプロパティを公開します。これらのプロパティは、関連する UltraCalendarLook の ViewStyle プロパティが 'Office2007' に設定されている時に、WinSchedule コントロールの視覚的エレメントのデフォルト値として使用される色を決定します。これらのプロパティは読み取り専用で、ほとんどの部分は、BaseColor の明度を増減することで派生します。前のセクションで説明したように、このクラスの 15 のインスタンスは、MS Outlook で使用できるカラー スキームのひとつに対応する各インスタンスである UltraCalendarLook の Outlook2007ColorSchemes コレクションに含まれます。

Outlook2007ColorScheme クラスはコンストラクタを公開します。したがって、インスタンスは Outlook2007ColorSchemes コレクションに依存せずに作成できます。コンストラクタはタイプ System.Drawing.Color のひとつのパラメータをとります。このパラメータは BaseColor プロパティの値を定義します。これは、表示可能な色を使用して、開発者がこのクラスのインスタンスを作成できるという意味で、それを Owner の Outlook2007ColorScheme プロパティに割り当てて、Office2007 ViewStyle に適切な外観が自動的に Owner に対して生成されます。ただし、BaseColor プロパティでの不適切な選択は派手な外観となる場合があり、「パステル」範囲の色だけを使用すべきであることに注意してください。

以下のサンプル コードは、非標準 BaseColor を使用して Outlook2007ColorScheme クラスのインスタンスを作成し、それを Owner に割り当てる方法を示します。

Visual Basic の場合:

Dim colorScheme As Outlook2007ColorScheme =_
  New Outlook2007ColorScheme( Color.FromArgb(214, 142, 122) )
Me.ultraCalendarInfo1.Owners("House").Outlook2007ColorScheme = colorScheme

C# の場合:

Outlook2007ColorScheme colorScheme =
  new Outlook2007ColorScheme( Color.FromArgb(214, 142, 122) );
this.ultraCalendarInfo1.Owners["House"].Outlook2007ColorScheme = colorScheme;

特別な Owner にデフォルトのカラー スキームを割り当てる

Outlook2007ColorSchemeCollection クラスは DefaultScheme プロパティを公開します。このプロパティは、静的な Infragistics.Win.Office2007ColorTable.ColorScheme プロパティの現在値で定義されているように、'Blue' または 'Black' Office2007 カラー スキームに対応する Outlook2007ColorScheme インスタンスを返します。特別の Owner にこのカラー スキームを割り当てたい場合や他の Owner に使用できないとしてスキームをマークすることを開発者が決定する場合があります。以下のサンプル コードは、Outlook2007ColorSchemeCollection クラスの DisallowAutoAssignment メソッドに関連して、Owner の Outlook2007ColorScheme プロパティを使用してこれを達成する方法を示します。

Visual Basic の場合:

Dim colorSchemes As Outlook2007ColorSchemeCollection =_
  Me.ultraCalendarLook1.Outlook2007ColorSchemes
Dim owner as Infragistics.Win.UltraWinSchedule.Owner =_
  Me.ultraCalendarInfo1.Owners("House")
owner.Outlook2007ColorScheme = colorSchemes.DefaultScheme
colorSchemes.DisallowAutoAssignment( colorSchemes.DefaultScheme.BaseColor )

C# の場合:

Outlook2007ColorSchemeCollection colorSchemes =
  this.ultraCalendarLook1.Outlook2007ColorSchemes;
Infragistics.Win.UltraWinSchedule.Owner owner =
  this.ultraCalendarInfo1.Owners["House"];
owner.Outlook2007ColorScheme = colorSchemes.DefaultScheme;
colorSchemes.DisallowAutoAssignment( colorSchemes.DefaultScheme.BaseColor );

DisallowAutoAssignment メソッドは、カラー スキームをそのカラーを追跡することによって使用できないものとしてマークするので、上記の例は現在のデフォルトのカラー スキームだけを予約します。つまり、'Blue' スキームまたは 'Black' のいずれかで、両方ではありません。開発者は BaseColorBlue および BaseColorBlack プロパティを使用して、両方のデフォルト スキームを予約することができ、デフォルトのカラー スキームのいずれもが、誰か他のオーナーに自動的に割り当てられません。あるいは、以下のサンプル コードで示すように、開発者は ColorSchemeChanged イベントのリスナーとして登録し、最後のデフォルト スキームで予約をリリースし、現在のスキームを予約することができます。

Visual Basic の場合:

AddHandler Infragistics.Win.Office2007ColorTable.ColorSchemeChanged,_
  AddressOf Me.OnColorSchemeChanged
.
.
.
Private Sub OnColorSchemeChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim calendarLook As UltraCalendarLook = Me.ultraCalendarLook1
    If calendarLook.ViewStyle = ViewStyle.Office2007 Then
        Dim colorSchemes As Outlook2007ColorSchemeCollection =_
          calendarLook.Outlook2007ColorSchemes
        Dim baseColor As Color = Color.Empty
        Select Case Office2007ColorTable.ColorScheme
            Case Office2007ColorScheme.Blue
                baseColor = colorSchemes.BaseColorBlue
            Case Office2007ColorScheme.Black
                baseColor = colorSchemes.BaseColorBlack
        End Select
        Dim owner As Infragistics.Win.UltraWinSchedule.Owner =_
          If(Me.ultraCalendarInfo1.Owners.Exists("House"),_
          Me.ultraCalendarInfo1.Owners("House"), Nothing)
        If Not owner Is Nothing Then
            Dim lastBaseColor As Color =_
              If(baseColor.Equals(colorSchemes.BaseColorBlue),_
              colorSchemes.BaseColorBlack, colorSchemes.BaseColorBlue)
            colorSchemes.AllowAutoAssignment(lastBaseColor)
            colorSchemes.DisallowAutoAssignment(baseColor)
            owner.Outlook2007ColorScheme = colorSchemes.DefaultScheme
        End If
    End If
End Sub

C# の場合:

Office2007ColorTable.ColorSchemeChanged += new EventHandler( this.OnColorSchemeChanged );
.
.
.
private void OnColorSchemeChanged( object sender, EventArgs e )
{
	UltraCalendarLook calendarLook = this.ultraCalendarLook1;
	if ( calendarLook.ViewStyle == ViewStyle.Office2007 )
	{
		Outlook2007ColorSchemeCollection colorSchemes = calendarLook.Outlook2007ColorSchemes;
		Color baseColor = Color.Empty;
		switch ( Office2007ColorTable.ColorScheme )
		{
			case Office2007ColorScheme.Blue:
			  { baseColor = colorSchemes.BaseColorBlue; } break;
			case Office2007ColorScheme.Black:
			  { baseColor = colorSchemes.BaseColorBlack; } break;
		}
		Infragistics.Win.UltraWinSchedule.Owner owner =
		  this.ultraCalendarInfo1.Owners.Exists("House") ? this.ultraCalendarInfo1.Owners["House"] : null;
		if ( owner != null )
		{
			Color lastBaseColor =	baseColor.Equals(colorSchemes.BaseColorBlue) ?
						colorSchemes.BaseColorBlack :
						colorSchemes.BaseColorBlue;
			colorSchemes.AllowAutoAssignment( lastBaseColor );
			colorSchemes.DisallowAutoAssignment( baseColor );
			owner.Outlook2007ColorScheme = colorSchemes.DefaultScheme;
		}
	}
}

まとめ

WinCalendarLook の Outlook2007ColorSchemes コレクションおよび Owner の Outlook2007ColorScheme は、カラー管理の負担を考えることなく、Outlook2007 カラー スキームを管理する方法を制御する手段を開発者に提供します。Outlook2007ColorScheme クラスは、Office2007 の外観を保持しながら、カスタム ベース カラー(つまり、Outlook2007 では使用されない)を指定する方法を開発者に提供することで、このメタファーを拡大します。