スタイルとテンプレートStyling and Templating

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)スタイルとテンプレートは、開発者および設計者が視覚的に説得力のある効果を作成し、製品の一貫した外観を作成できる、一連の機能 (スタイル、テンプレート、トリガー、およびストーリーボード) を表します。 styling and templating refer to a suite of features (styles, templates, triggers, and storyboards) that allow developers and designers to create visually compelling effects and to create a consistent appearance for their product. 開発者や設計者は、アプリケーション単位で広範囲に外観をカスタマイズできますが、アプリケーション内およびアプリケーション間で外観の保守および共有を可能にするには、強力なスタイルとテンプレートのモデルが必要です。Although developers and or designers can customize the appearance extensively on an application-by-application basis, a strong styling and templating model is necessary to allow maintenance and sharing of the appearance within and among applications. Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) はそのモデルを提供します。 provides that model.

WPFWPF のスタイル モデルの他の機能は、表示とロジックの分離です。Another feature of the WPFWPF styling model is the separation of presentation and logic. つまり、設計者は、開発者が C# や Visual Basic を使用してプログラミング ロジックについて作業するのと同時に XAMLXAML のみを使用してアプリケーションの外観について作業できます。This means that designers can work on the appearance of an application by using only XAMLXAML at the same time that developers work on the programming logic by using C# or Visual Basic.

この概要では、アプリケーションのスタイルとテンプレートの側面に焦点を当てています。データ バインディングの概念については説明しません。This overview focuses on the styling and templating aspects of the application and does not discuss any data binding concepts. データ バインディングの詳細については、「データ バインディングの概要」を参照してください。For information about data binding, see Data Binding Overview.

また、スタイルとテンプレートの再利用を使用できるようにするリソースを理解する必要もあります。In addition, it is important to understand resources, which are what enable styles and templates to be reused. リソースの詳細については、「XAML Resources」を参照してください。For more information about resources, see XAML Resources.

スタイルとテンプレートのサンプルStyling and Templating Sample

この概要で使用するコード例は、次の図に示すように単純な写真のサンプルに基づいています。The code examples used in this overview are based on a simple photo sample shown in the following illustration:

Styled ListViewStyled ListView

この単純な写真のサンプルは、スタイルとテンプレートを使用して、視覚的に説得力のあるユーザー エクスペリエンスを作成します。This simple photo sample uses styling and templating to create a visually compelling user experience. サンプルの 2 つTextBlock要素、およびListBoxイメージの一覧にバインドされているコントロール。The sample has two TextBlock elements and a ListBox control that is bound to a list of images. 完全なサンプルについては、「Introduction to Styling and Templating Sample」を参照してください。For the complete sample, see Introduction to Styling and Templating Sample.

スタイルの基本Style Basics

考えることができます、Styleプロパティ値のセットを 1 つ以上の要素に適用する便利な方法として。You can think of a Style as a convenient way to apply a set of property values to more than one element. たとえば、次TextBlock要素と、既定の外観。For example, consider the following TextBlock elements and their default appearance:

<TextBlock>My Pictures</TextBlock>
<TextBlock>Check out my new pictures!</TextBlock>

スタイル サンプル スクリーン ショットStyling sample screen shot

などのプロパティを設定して既定の外観を変更することができますFontSizeFontFamily、各TextBlock要素の直後です。You can change the default appearance by setting properties, such as FontSize and FontFamily, on each TextBlock element directly. ただし、する場合は、 TextBlock 、一部のプロパティを共有する要素を作成することができます、Styleで、Resourcesのセクションで、XAMLXAMLファイルを次のように。However, if you want your TextBlock elements to share some properties, you can create a Style in the Resources section of your XAMLXAML file, as shown here:

<Window.Resources>
<!--A Style that affects all TextBlocks-->
<Style TargetType="TextBlock">
  <Setter Property="HorizontalAlignment" Value="Center" />
  <Setter Property="FontFamily" Value="Comic Sans MS"/>
  <Setter Property="FontSize" Value="14"/>
</Style>
</Window.Resources>

設定すると、TargetTypeに自分のスタイルのTextBlock型、スタイルはすべてに適用、TextBlockウィンドウ内の要素。When you set the TargetType of your style to the TextBlock type, the style is applied to all the TextBlock elements in the window.

これで、TextBlock要素は次のように表示されます。Now the TextBlock elements appear as follows:

スタイル サンプル スクリーン ショットStyling sample screen shot

スタイルの拡張Extending Styles

場合、2 つTextBlockなど一部のプロパティ値を共有する要素、FontFamilyし、中央揃えHorizontalAlignmentがテキストに追加のプロパティの「マイ ピクチャ」もできます。Perhaps you want your two TextBlock elements to share some property values, such as the FontFamily and the centered HorizontalAlignment, but you also want the text "My Pictures" to have some additional properties. 次に示すように、これは、最初のスタイルに基づいている新しいスタイルを作成することで実現できます。You can do that by creating a new style that is based on the first style, as shown here:

<Window.Resources>
<!--A Style that extends the previous TextBlock Style-->
<!--This is a "named style" with an x:Key of TitleText-->
<Style BasedOn="{StaticResource {x:Type TextBlock}}"
       TargetType="TextBlock"
       x:Key="TitleText">
  <Setter Property="FontSize" Value="26"/>
  <Setter Property="Foreground">
  <Setter.Value>
      <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
        <LinearGradientBrush.GradientStops>
          <GradientStop Offset="0.0" Color="#90DDDD" />
          <GradientStop Offset="1.0" Color="#5BFFFF" />
        </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>
    </Setter.Value>
  </Setter>
</Style>
</Window.Resources>

x:Key に以前のスタイルが指定されたことがわかります。Notice that the previous style is given an x:Key. 設定するスタイルを適用する、StyleプロパティをTextBlockx:Key次に示すように、値します。To apply the style, you set the Style property on your TextBlock to the x:Key value, as shown here:

<TextBlock Style="{StaticResource TitleText}" Name="textblock1">My Pictures</TextBlock>
<TextBlock>Check out my new pictures!</TextBlock>

これは、TextBlockスタイルようになりました、HorizontalAlignmentの値CenterFontFamilyの値Comic Sans MSFontSize 26, の値とForeground値に設定、LinearGradientBrush例を示します。This TextBlock style now has a HorizontalAlignment value of Center, a FontFamily value of Comic Sans MS, a FontSize value of 26, and a Foreground value set to the LinearGradientBrush shown in the example. も優先される、FontSize基本スタイルの値。Notice that it overrides the FontSize value of the base style. 1 つ以上を使用する必要がある場合Setterで同じプロパティを設定、 StyleSetterは宣言されている最後が優先されます。If there is more than one Setter setting the same property in a Style, the Setter that is declared last takes precedence.

新機能を次に示します、TextBlock要素はのようになります。The following shows what the TextBlock elements now look like:

スタイル設定された TextBlocksStyled TextBlocks

これは、TitleTextスタイル拡張用に作成された、スタイル、TextBlock型です。This TitleText style extends the style that has been created for the TextBlock type. x:Key の値を使用して x:Key を持つスタイルを拡張することも可能です。You can also extend a style that has an x:Key by using the x:Key value. 例については、提示された例を参照してください、BasedOnプロパティです。For an example, see the example provided for the BasedOn property.

TargetType プロパティと X:key 属性の関係Relationship of the TargetType Property and the x:Key Attribute

最初の例に示すように、設定、TargetTypeプロパティをTextBlockスタイルを割り当てずに、x:Keyすべてに適用されるスタイルTextBlock要素。As shown in the first example, setting the TargetType property to TextBlock without assigning the style an x:Key causes the style to be applied to all TextBlock elements. ここでは、x:Key は暗黙的に {x:Type TextBlock} に設定されます。In this case, the x:Key is implicitly set to {x:Type TextBlock}. つまり、明示的に設定する場合、x:Key以外の値を何も{x:Type TextBlock}Styleがすべてに適用されないTextBlock要素に自動的にします。This means that if you explicitly set the x:Key value to anything other than {x:Type TextBlock}, the Style is not applied to all TextBlock elements automatically. 代わりに、スタイルを適用する必要があります (を使用して、x:Key値) に、TextBlock要素に明示的にします。Instead, you must apply the style (by using the x:Key value) to the TextBlock elements explicitly. Resources セクションには、自分のスタイルと、設定しないかどうか、TargetTypeして自分のスタイルのプロパティを提供する必要があります、x:Keyです。If your style is in the resources section and you do not set the TargetType property on your style, then you must provide an x:Key.

既定値を提供するだけでなく、 x:KeyTargetTypeプロパティ set アクセス操作子のプロパティを適用する種類を指定します。In addition to providing a default value for the x:Key, the TargetType property specifies the type to which setter properties apply. 指定しない場合、 TargetType、内のプロパティを修飾する必要があります、Setter構文を使用してクラス名を持つオブジェクトProperty="ClassName.Property"です。If you do not specify a TargetType, you must qualify the properties in your Setter objects with a class name by using the syntax Property="ClassName.Property". 設定の例ではなくProperty="FontSize"、設定する必要がありますProperty"TextBlock.FontSize"または"Control.FontSize"です。For example, instead of setting Property="FontSize", you must set Property to "TextBlock.FontSize" or "Control.FontSize".

また、多く WPFWPF コントロールは、その他の WPFWPF コントロールの組み合わせで構成されます。Also note that many WPFWPF controls consist of a combination of other WPFWPF controls. 型のすべてのコントロールに適用されるスタイルを作成する場合、予期しない結果になる可能性があります。If you create a style that applies to all controls of a type, you might get unexpected results. 対象とするスタイルを作成する場合など、TextBlockに入力、 Window、スタイルをすべて適用TextBlock ウィンドウで、コントロール場合でも、TextBlockなど、他のコントロールの一部である、ListBoxです。For example, if you create a style that targets the TextBlock type in a Window, the style is applied to all TextBlock controls in the window, even if the TextBlock is part of another control, such as a ListBox.

スタイルとリソースStyles and Resources

派生した任意の要素のスタイルを使用することができますFrameworkElementまたはFrameworkContentElementです。You can use a style on any element that derives from FrameworkElement or FrameworkContentElement. スタイルを宣言する最も一般的な方法は、前の例で示したように XAMLXAML ファイルの Resources セクションのリソースとしてです。The most common way to declare a style is as a resource in the Resources section in a XAMLXAML file, as shown in the previous examples. スタイルはリソースであるため、すべてのリソースに適用されるスコープの規則に従います。スタイルを宣言する場所は、スタイルを適用できる場所に影響します。Because styles are resources, they obey the same scoping rules that apply to all resources; where you declare a style affects where the style can be applied. たとえば、アプリケーションの定義 XAMLXAML ファイルのルート要素でスタイルを宣言すると、そのスタイルは、アプリケーションのどこでも使用できます。For example, if you declare the style in the root element of your application definition XAMLXAML file, the style can be used anywhere in your application. ナビゲーション アプリケーションを作成し、アプリケーションの XAMLXAML ファイルのいずれかでスタイルを宣言すると、そのスタイルはその XAMLXAML ファイルでのみ使用できます。If you create a navigation application and declare the style in one of the application's XAMLXAML files, the style can be used only in that XAMLXAML file. リソースのスコープの規則の詳細については、「XAML Resources」を参照してください。For more information about scoping rules for resources, see XAML Resources.

また、スタイルとリソースの詳細については、この概要で後述する「共有リソースとテーマ」 を参照してください。In addition, you can find more information about styles and resources in Shared Resources and Themes later in this overview.

プログラムによるスタイルの設定Setting Styles Programmatically

プログラムによって要素に名前付きのスタイルを割り当てるには、リソースのコレクションからスタイルを取得し、要素に割り当てますStyleプロパティです。To assign a named style to an element programmatically, get the style from the resources collection and assign it to the element's Style property. リソースのコレクション内の項目は型の注Objectです。Note that the items in a resources collection are of type Object. したがって、するスタイルを取得したをキャストする必要があります、Styleに割り当てる前に、Styleプロパティです。Therefore, you must cast the retrieved style to a Style before assigning it to the Style property. 例については、定義された設定にTitleTextのスタイルを設定、TextBlockというtextblock1、次の操作します。For example, to set the defined TitleText style on a TextBlock named textblock1, do the following:

textblock1.Style = (Style)(this.Resources["TitleText"]);
textblock1.Style = CType(Me.Resources("TitleText"), Style)

スタイルが適用されると、封印され、変更できなくなります。Note that once a style has been applied, it is sealed and cannot be changed. 既に適用されているスタイルを動的に変更する場合、新しいスタイルを作成して既存のスタイルを置き換える必要があります。If you want to dynamically change a style that has already been applied, you must create a new style to replace the existing one. 詳細については、IsSealed プロパティを参照してください。For more information, see the IsSealed property.

カスタム ロジックに基づいて適用するスタイルを選択するオブジェクトを作成できます。You can create an object that chooses a style to apply based on custom logic. 例については、提示された例を参照してください、StyleSelectorクラスです。For an example, see the example provided for the StyleSelector class.

バインディング、動的リソース、およびイベント ハンドラーBindings, Dynamic Resources, and Event Handlers

Setter.Value プロパティを使用して、バインディング マークアップ拡張機能またはDynamicResource マークアップ拡張機能を指定できます。Note that you can use the Setter.Value property to specify a Binding Markup Extension or a DynamicResource Markup Extension. 詳細については、指定された例を参照して、Setter.Valueプロパティです。For more information, see the examples provided for the Setter.Value property.

ここまでは、この概要は、プロパティ値を設定する setterの使用のみを説明しています。So far, this overview only discusses the use of setters to set property value. スタイルではイベント ハンドラーも指定できます。You can also specify event handlers in a style. 詳細については、「EventSetter」を参照してください。For more information, see EventSetter.

データ テンプレートData Templates

このサンプル アプリケーションでは、ListBox写真の一覧にバインドされているコントロール。In this sample application, there is a ListBox control that is bound to a list of photos:

<ListBox ItemsSource="{Binding Source={StaticResource MyPhotos}}"
         Background="Silver" Width="600" Margin="10" SelectedIndex="0"/>

これは、ListBox現在、次のようになります。This ListBox currently looks like the following:

テンプレートの適用前の ListBoxListBox before applying template

ほとんどのコントロールはいくつかの型のコンテンツを持ち、そのコンテンツは多くの場合バインディング先のデータから取得されます。Most controls have some type of content, and that content often comes from data that you are binding to. このサンプルでは、データは写真のリストです。In this sample, the data is the list of photos. WPFWPFを使用する、DataTemplateデータの視覚表現を定義します。In WPFWPF, you use a DataTemplate to define the visual representation of data. 基本的に、新機能に配置する、DataTemplateレンダリングされたアプリケーション内でデータがどのようにを決定します。Basically, what you put into a DataTemplate determines what the data looks like in the rendered application.

サンプル アプリケーションでは、各カスタム Photo オブジェクトには、イメージのファイル パスを指定する文字列型の Source プロパティがあります。In our sample application, each custom Photo object has a Source property of type string that specifies the file path of the image. 現在のところ、写真オブジェクトは、ファイルのパスとして表示されます。Currently, the photo objects appear as file paths.

作成する、イメージとして表示される写真に関して、DataTemplateリソースとして。For the photos to appear as images, you create a DataTemplate as a resource:

<Window.Resources>
<!--DataTemplate to display Photos as images
    instead of text strings of Paths-->
<DataTemplate DataType="{x:Type local:Photo}">
  <Border Margin="3">
    <Image Source="{Binding Source}"/>
  </Border>
</DataTemplate>
</Window.Resources>

注意して、DataTypeプロパティによく似ています、TargetTypeのプロパティ、Styleです。Notice that the DataType property is very similar to the TargetType property of the Style. 場合、DataTemplateリソース セクションで、指定した場合、DataTypeプロパティ型を割り当てられませんと、 x:KeyDataTemplateはその型が表示されるたびに適用します。If your DataTemplate is in the resources section, when you specify the DataType property to a type and not assign it an x:Key, the DataTemplate is applied whenever that type appears. 割り当てるオプションが常にある、DataTemplateで、x:Keyとして設定し、StaticResourceプロパティDataTemplateなどの型、ItemTemplateプロパティまたはContentTemplateプロパティです。You always have the option to assign the DataTemplate with an x:Key and then set it as a StaticResource for properties that take DataTemplate types, such as the ItemTemplate property or the ContentTemplate property.

基本的には、DataTemplate上記の例で定義するがあるときに、Photoオブジェクトとして表示されるはず、Image内で、Borderです。Essentially, the DataTemplate in the above example defines that whenever there is a Photo object, it should appear as an Image within a Border. このDataTemplate、次のようなアプリケーション。With this DataTemplate, our application now looks like this:

写真のイメージPhoto image

データ テンプレートのモデルでは、その他の機能を提供します。The data templating model provides other features. たとえばを使用して他のコレクションを格納するコレクションのデータを表示する場合、HeaderedItemsControlなどを入力、MenuまたはTreeViewが、HierarchicalDataTemplateです。For example, if you are displaying collection data that contains other collections using a HeaderedItemsControl type such as a Menu or a TreeView, there is the HierarchicalDataTemplate. 別のデータ テンプレートの機能は、DataTemplateSelectorを選択することができます、DataTemplateに基づいてカスタム ロジックを使用します。Another data templating feature is the DataTemplateSelector, which allows you to choose a DataTemplate to use based on custom logic. 詳細については、「Data Templating Overview」を参照してください。ここでは、さまざまなデータ テンプレート機能を詳しく説明します。For more information, see Data Templating Overview, which provides a more in-depth discussion of the different data templating features.

コントロール テンプレートControl Templates

WPFWPFControlTemplateコントロールのコントロールの外観を定義します。In WPFWPF, the ControlTemplate of a control defines the appearance of the control. 構造体とコントロールの外観を変更するには、新しい定義することによってControlTemplateコントロール。You can change the structure and appearance of a control by defining a new ControlTemplate for the control. 多くの場合、これによって、独自のカスタム コントロールを作成する必要がない程度に十分な柔軟性を得られます。In many cases, this gives you enough flexibility so that you do not have to write your own custom controls. 詳細については、「ControlTemplate の作成による既存のコントロールの外観のカスタマイズ」を参照してください。For more information, see Customizing the Appearance of an Existing Control by Creating a ControlTemplate.

トリガーTriggers

トリガーは、プロパティ値が変更されたときまたはイベントが発生したときに、プロパティを設定するかまたはアニメーションなどのアクションを開始します。A trigger sets properties or starts actions, such as an animation, when a property value changes or when an event is raised. StyleControlTemplate、およびDataTemplateがすべて、 Triggers 、一連のトリガーを含めることができるプロパティです。Style, ControlTemplate, and DataTemplate all have a Triggers property that can contain a set of triggers. さまざまな種類のトリガーがあります。There are various types of triggers.

プロパティ トリガーProperty Triggers

ATriggerセット プロパティが値またはプロパティの値に基づいてアクションを開始するいいますプロパティ トリガーします。A Trigger that sets property values or starts actions based on the value of a property is called a property trigger.

プロパティ トリガーを使用する方法を示すためには、行うことができます各ListBoxItemが選択されている場合を除き、部分的に透過的です。To demonstrate how to use property triggers, you can make each ListBoxItem partially transparent unless it is selected. 次のスタイルを設定、Opacityの値、ListBoxItem0.5です。The following style sets the Opacity value of a ListBoxItem to 0.5. ときに、IsSelectedプロパティはtrue、ただし、Opacityに設定されている1.0:When the IsSelected property is true, however, the Opacity is set to 1.0:

<Style TargetType="ListBoxItem">
  <Setter Property="Opacity" Value="0.5" />
  <Setter Property="MaxHeight" Value="75" />
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
        <Setter Property="Opacity" Value="1.0" />
    </Trigger>
  </Style.Triggers>
</Style>

この例では、Triggerプロパティの値を設定することに注意してください、Triggerクラスもあります、EnterActionsExitActionsアクションを実行するトリガーを有効にするプロパティです。This example uses a Trigger to set a property value, but note that the Trigger class also has the EnterActions and ExitActions properties that enable a trigger to perform actions.

注意して、MaxHeightのプロパティ、ListBoxItemに設定されている75です。Notice that the MaxHeight property of the ListBoxItem is set to 75. 次の図では、3 番目の項目が選択した項目です。In the following illustration, the third item is the selected item:

Styled ListViewStyled ListView

Eventtrigger とストーリー ボードEventTriggers and Storyboards

トリガーの別の種類は、EventTrigger一連のイベントの発生に基づく操作を開始します。Another type of trigger is the EventTrigger, which starts a set of actions based on the occurrence of an event. たとえば、次EventTriggerオブジェクトを指定する、マウス ポインターが入ったときに、 ListBoxItemMaxHeightプロパティの値にアニメーションを付ける90経由で、 0.2 2 番目の期間。For example, the following EventTrigger objects specify that when the mouse pointer enters the ListBoxItem, the MaxHeight property animates to a value of 90 over a 0.2 second period. この項目からマウスを遠ざけると、1 秒間、元の値に戻ります。When the mouse moves away from the item, the property returns to the original value over a period of 1 second. 方法を指定する必要はありません、To値をMouseLeaveアニメーション。Note how it is not necessary to specify a To value for the MouseLeave animation. これは、アニメーションが元の値を追跡できるからです。This is because the animation is able to keep track of the original value.

<EventTrigger RoutedEvent="Mouse.MouseEnter">
  <EventTrigger.Actions>
    <BeginStoryboard>
      <Storyboard>
        <DoubleAnimation
          Duration="0:0:0.2"
          Storyboard.TargetProperty="MaxHeight"
          To="90"  />
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave">
  <EventTrigger.Actions>
    <BeginStoryboard>
      <Storyboard>
        <DoubleAnimation
          Duration="0:0:1"
          Storyboard.TargetProperty="MaxHeight"  />
      </Storyboard>
    </BeginStoryboard>
  </EventTrigger.Actions>
</EventTrigger>

詳細については、「ストーリーボードの概要」を参照してください。For more information, see the Storyboards Overview.

次の図では、マウスは3 番目の項目を指しています。In the following illustration, the mouse is pointing to the third item:

スタイル サンプル スクリーン ショットStyling sample screen shot

MultiTriggers、DataTriggers、および MultiDataTriggersMultiTriggers, DataTriggers, and MultiDataTriggers

加えTriggerEventTriggerトリガーの他の種類があります。In addition to Trigger and EventTrigger, there are other types of triggers. MultiTrigger 複数の条件に基づくプロパティ値を設定できます。MultiTrigger allows you to set property values based on multiple conditions. 使用するDataTriggerMultiDataTrigger条件のプロパティがデータ バインドの場合。You use DataTrigger and MultiDataTrigger when the property of your condition is data-bound.

共有リソースとテーマShared Resources and Themes

一般的な Windows Presentation Foundation (WPF) アプリケーションには、アプリケーション全体で適用されている複数のユーザー インターフェイス (UI) リソースがあります。A typical Windows Presentation Foundation (WPF) application might have multiple user interface (UI) resources that are applied throughout the application. ひとまとめにして、このリソースのセットをアプリケーションのテーマとみなすことができます。Collectively, this set of resources can be considered the theme for the application. Windows Presentation Foundation (WPF)、サポート パッケージ ユーザー インターフェイス (UI) リソースをテーマとしてとしてカプセル化されたリソース ディクショナリを使用して、ResourceDictionaryクラスです。Windows Presentation Foundation (WPF) provides support for packaging user interface (UI) resources as a theme by using a resource dictionary that is encapsulated as the ResourceDictionary class.

Windows Presentation Foundation (WPF) のテーマは、任意の要素のビジュアルをカスタマイズするため、スタイル設定および Windows Presentation Foundation (WPF) を公開するテンプレートのメカニズムを使用して定義されます。Windows Presentation Foundation (WPF) themes are defined by using the styling and templating mechanism that Windows Presentation Foundation (WPF) exposes for customizing the visuals of any element.

Windows Presentation Foundation (WPF) テーマ リソースは、埋め込まれたリソース ディクショナリに格納されます。Windows Presentation Foundation (WPF) theme resources are stored in embedded resource dictionaries. これらのリソース ディクショナリは署名されたアセンブリ内に埋め込む必要があり、コード自体と同じアセンブリまたはサイド バイ サイド アセンブリで埋め込むことができます。These resource dictionaries must be embedded within a signed assembly, and can either be embedded in the same assembly as the code itself or in a side-by-side assembly. PresentationFramework.dll、Windows Presentation Foundation (WPF) コントロールを含むアセンブリの場合は、テーマのリソースは、サイド バイ サイド アセンブリの系列には。In the case of PresentationFramework.dll, the assembly which contains Windows Presentation Foundation (WPF) controls, theme resources are in a series of side-by-side assemblies.

テーマは、要素のスタイルを検索するときに最後に検索する場所になります。The theme becomes the last place to look when searching for the style of an element. 通常、検索は、まず適切なリソースを検索する要素のツリーをウォークしてから、アプリケーションのリソース コレクションがないか調べ、最後に、システム クエリを実行します。Typically, the search will begin by walking up the element tree searching for an appropriate resource, then look in the application resource collection and finally query the system. この方法によって、アプリケーション開発者は、テーマに到達する前に、ツリー レベルまたはアプリケーション レベルで任意のオブジェクトのスタイルを再定義できます。This gives application developers a chance to redefine the style for any object at the tree or application level before reaching the theme.

複数のアプリケーションでテーマを再利用できる個別ファイルとしてリソース ディクショナリを定義できます。You can define resource dictionaries as individual files that enable you to reuse a theme across multiple applications. また、同じ種類のリソースだが値が異なる複数のリソース ディクショナリを定義して、交換できるテーマを作成することもできます。You can also create swappable themes by defining multiple resource dictionaries that provide the same types of resources but with different values. アプリケーションをスキニングする場合、これらのスタイルまたはその他のリソースをアプリケーション レベルで再定義することを推奨します。Redefining these styles or other resources at the application level is the recommended approach for skinning an application.

スタイル テンプレートなど、複数のアプリケーションで、リソースのセットを共有するには、作成、XAMLXAMLファイルし、定義、ResourceDictionaryです。To share a set of resources, including styles and templates, across applications, you can create a XAMLXAML file and define a ResourceDictionary. たとえば、ControlTemplates サンプルを使用したスタイルの一部を示す次の図を見てください。For example, take a look at the following illustration that shows part of the Styling with ControlTemplates Sample:

コントロール テンプレートの例Control Template Examples

サンプルの XAMLXAML ファイルを確認すると、すべてのファイルに次の項目が含まれていることがわかります。If you look at the XAMLXAML files in the sample, you will notice that the files all have the following:

<ResourceDictionary.MergedDictionaries>
  <ResourceDictionary Source="Shared.xaml" />
</ResourceDictionary.MergedDictionaries>

共有はshared.xamlを定義する、ResourceDictionary一貫性のある外観のサンプルでコントロールできるようにする一連のスタイル、およびブラシ リソースを格納しています。It is the sharing of shared.xaml, which defines a ResourceDictionary that contains a set of style and brush resources that enables the controls in the sample to have a consistent look.

詳細については、「Merged Resource Dictionaries」を参照してください。For more information, see Merged Resource Dictionaries.

カスタム コントロールのテーマを作成する場合、「Control Authoring Overview」の「外部のコントロール ライブラリ」セクションを参照してください。If you are creating a theme for you custom control, see the External Control Library section of the Control Authoring Overview.

関連項目See Also

WPF におけるパッケージの URIPack URIs in WPF
方法: ControlTemplate によって生成された要素を検索するHow to: Find ControlTemplate-Generated Elements
DataTemplate によって生成された要素を検索するFind DataTemplate-Generated Elements