Style クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
型のインスタンス間で共有できるプロパティ セッターを含みます。
Style
は通常、リソース コレクション内で宣言されるため、コントロール テンプレートやその他のスタイルを適用するために共有および使用できます。
public ref class Style sealed : DependencyObject
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.Activatable(Microsoft.UI.Xaml.IStyleFactory, 65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class Style final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="Setters")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Microsoft.UI.Xaml.IStyleFactory), 65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class Style : DependencyObject
Public NotInheritable Class Style
Inherits DependencyObject
<Style .../>
-or-
<Style ...>
oneOrMoreSetters
</Style>
- 継承
- 属性
例
次の使用例は、 TextBlock 用と TextBox 用の 2 つのスタイルを作成します。 各スタイルは、コントロールの 2 つのインスタンスに適用され、 と TextBox
のそれぞれにTextBlock
均一な外観が作成されます。 この例では、 を {StaticResource} マークアップ拡張機能として参照Style
することで、各コントロールの FrameworkElement.Style プロパティを設定します。 この例では、リソース ディクショナリからスタイルを取得し、コード内のコントロールに適用する方法も示します。
各スタイルには複数の セッター パーツがあります。 この XAML では、XAML プロパティ要素は表示されません Style.Setters
。 これは、このプロパティの XAML での一般的な使用法です。
Setters は Style の XAML コンテンツ プロパティであるため、値はStyle.Setters
暗黙的です。 XAML 構文の詳細と、XAML コンテンツ構文を使用して特定の XAML 要素を暗示および省略する方法については、 XAML 構文ガイドを参照してください。
TextBox のスタイルでは、Margin プロパティが 4 に設定されていることに注意してください。つまり、 は、すべての辺に 4 の余白があることを意味TextBox
します。 2 番目の TextBlock の長さを補うために、姓は First Name よりも小さいため、最初TextBlock
の TextBlock よりも短いため、2 番目TextBox
の の プロパティに値 "6,4,4,4" が割り当てられますMargin
。 これにより、2 番目 TextBox
の はスタイルで指定されているものとは異なる余白を持ち、最初 TextBox
の と水平方向に揃えられます。
<StackPanel x:Name="rootPanel">
<StackPanel.Resources>
<!--Create a Style for a TextBlock to specify that the
Foreground equals Navy, FontSize equals 14, and
VerticalAlignment equals Botton.-->
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="Foreground" Value="Navy"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
</Style>
<!--Create a Style for a TextBox that specifies that
the Width is 200, Height is 30, Margin is 4,
Background is LightBlue, and FontSize is 14.-->
<Style TargetType="TextBox" x:Key="TextBoxStyle">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Margin" Value="4"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="LightBlue" Offset="0.5"/>
<GradientStop Color="Navy" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!--Apply the TextBlockStyle and TextBoxStyle to each
TextBlock and TextBox, respectively.-->
<StackPanel Orientation="Horizontal">
<TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"
Margin="6,4,4,4"/>
</StackPanel>
<StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>
private void ShowEmailAddressBox()
{
TextBlock emailAddressLabel = new TextBlock();
emailAddressLabel.Text = "Email:";
emailAddressLabel.Style = (Style)rootPanel.Resources["TextBlockStyle"];
TextBox emailAddressBox = new TextBox();
emailAddressBox.Style = (Style)rootPanel.Resources["TextBoxStyle"];
emailAddressBox.Margin = new Thickness(38, 4, 4, 4);
emailAddressPanel.Children.Add(emailAddressLabel);
emailAddressPanel.Children.Add(emailAddressBox);
}
次の使用例は、2 つのスタイル要素を作成します。
TargetType
最初のスタイル要素の は にTextBox
設定され、TargetType
2 番目のスタイル要素の は にButton
設定されます。 これらは、コントロールとButton
コントロールの暗黙的なTextBox
スタイルとして適用されます。
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Pink" />
<Setter Property="FontSize" Value="15" />
</Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="Yellow" />
</Style>
</StackPanel.Resources>
<TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
<Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>
次の使用例は、Style
名前付き BaseStyle に基づいて InheritedStyle という名前の をStyle
作成します。
InheritedStyle は の値Yellow
をBackground
継承BaseStyle
し、 のRed
値をForeground
追加します。
<StackPanel>
<StackPanel.Resources>
<Style x:Key="BaseStyle" TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
<!--Create a Style based on BaseStyle-->
<Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
<Setter Property="Foreground" Value="Red" />
</Style>
</StackPanel.Resources>
<!--A button with default style-->
<Button Content="HelloWorld" />
<!--A button with base style-->
<Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
<!--A button with a style that is inherited from the BaseStyle-->
<Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>
注釈
Style
は基本的に、このようなプロパティを持つ特定の型の 1 つ以上のインスタンスに適用されるプロパティ設定のコレクションです。 には Style
、1 つ以上の Setter オブジェクトのコレクションが含まれます。 それぞれにSetter
プロパティと値があります。
Property
は、スタイルが適用される要素のプロパティの名前です。
Value
は、 プロパティに適用される値です。
を適用 Style
するには、ターゲット オブジェクトが DependencyObject である必要があります。 各 Setter が Property 値として参照する プロパティ は、依存関係プロパティである必要があります。
を作成するときは、 TargetType プロパティを設定する Style
必要があります。 それ以外の場合は、例外がスローされます。
内の同じプロパティ Style
に値を設定し、要素に直接設定した場合は、要素に設定された値が直接優先されます。 詳細については、「 依存関係プロパティの概要」、具体的には「依存関係プロパティの値の優先順位」セクションを参照してください。
XAML リソースとしての スタイル の定義
Style
は、ほとんどの場合、XAML で ResourceDictionary のリソースとして定義されます。
-
Style
同じ XAML ページで定義されている他の UI 項目でのみ使用される の場合は、通常、FrameworkElement.Resources コレクション (ルート要素が Page の場合)Page.Resources
で Style を定義します。 -
Style
アプリ内の複数のページで使用される の場合は、通常、Application.Resources コレクションで Style を定義します。 または、MergedDictionaries 値として含めるアプリ用の別のApplication.Resources
XAML ファイルを用意することもできます。 - ほとんどの UI 要素には、Windows ランタイムによって定義される既定のスタイルがあります。 既定のスタイルのコピーは、 generic.xaml と呼ばれるデザイン ヘルパー XAML ファイルで確認できます。これは、技術的にはアプリのリソース ファイルではありませんが、1 つのように構造化されています。 ツールで有効になっているスタイルのコピーを編集するときに、このファイルの個別の部分をアプリの XAML にコピーすることができますが、このようなコピーを作成したら、 Resources コレクションのいずれかに含めるか、 MergedDictionaries を通じて間接的にアクセスする必要があります。 このような場合はすべて、既定値をオーバーライドする変更された XAML がアプリの一部として含まれます。
Style
ResourceDictionary で定義された要素は、通常は XAML リソースの要件である x:Key 属性または x:Name 属性を持つ必要はありません。 この方法で定義された は Style
、 その TargetType プロパティ値を暗黙的なキーとして使用し、暗黙的なスタイルと呼ばれます。
XAML リソース ディクショナリの使用方法の詳細については、「 ResourceDictionary および XAML リソース参照」を参照してください。
スタイルとテンプレート
で Setter を使用して、任意の Style
依存関係プロパティに値を適用できます。
Setter
ただし、一般的Style
な の XAML マークアップの大部分を構成するのは、Control 派生クラスの Template プロパティの です。 の ValueSetter
Property="Template"
は、ほとんどの場合、 ControlTemplate オブジェクト要素を含むプロパティ要素として指定されます。
Style
を使用してコントロール テンプレートを定義する場合、Control.Template セッターの要素の Style
TargetType と ControlTemplate 要素の TargetType は常に同じ値を使用する必要があります。
テンプレート セッターは、そのテンプレートが適用されるコントロール インスタンスの基本的なテンプレート UI 定義を定義します。 また、コントロールの表示状態と、既定のテーマの切り替えなどの他の状態ベースの UI 定義も含まれます。
ListBox などの複雑なコントロールの場合、既定のテンプレート Style と 内の ControlTemplate には、数百行の XAML を含めることができます。 コントロール テンプレートのシナリオでの の Style
役割の詳細については、「 XAML コントロール テンプレート」を参照してください。
多くの場合、コントロールのテンプレートには、論理状態に応じてコントロールの外観を変更する視覚的な状態が含まれています。 たとえば、 Button を 押したときに、そのテンプレートから新しいビジュアル状態を適用すると、外観が異なる場合があり、すべての外観の変更はコードではなく XAML から行うことができます。 ビジュアル状態のしくみと、それらを変更する方法、またはカスタム コントロールの状態を定義する方法の詳細については、「 XAML コントロール テンプレート」を参照してください。
スタイルとランタイムの動作
実行時に によって Style
設定された個々のプロパティの値を変更でき、新しい値によって Setters 値が上書きされます。 たとえば、このプロパティがスタイルによって設定されている場合でも、実行時に Template プロパティを設定できます。
のプロパティ Style
は実行時に調整できますが、そのスタイルが何にも適用されておらず、暗黙的に使用されていないリソースとしてのみ存在する場合に限られます。 たとえば、x:Key 属性を持つ Resources に存在するが、そのスタイルを参照する XAML の他の場所に {StaticResource} マークアップ拡張値がないスタイルについては、Setters のコレクションにセッターを追加できます。 ただし、読み込まれたオブジェクトによって Style が参照され、値に使用されるとすぐに、 は Style
シールされていると見なされます。 シール状態は、 の IsSealed プロパティ Style
の値を確認することで検出できます。 の場合、 true
スタイルはシールされ、その中のプロパティや Setter サブ値を変更することはできません。 スタイルが使用され、シールされた時点は、 が参照されているオブジェクトによって Loaded イベントがStyle
発生したときにも検出できます。
BasedOn スタイル
アプリで定義されている既存のスタイル、またはWindows ランタイム コントロールの既定のスタイルに基づいて、新しいスタイルを作成できます。 これを行うには、 BasedOn プロパティを使用します。 これにより、XAML の重複が軽減され、リソースの管理が容易になります。 各スタイルでは、1 つの BasedOn
スタイルのみがサポートされます。 詳細については、「 BasedOn コントロール」または「 スタイル コントロール」を参照してください。
暗黙的なスタイル
同じ TargetType のすべてのオブジェクトで が暗黙的に使用されるようにStyle
スタイルを定義できます。このようなオブジェクトの各インスタンスが Style を FrameworkElement.Style 値として明示的に参照する必要はありません。 リソースが <Style>
x:Key 属性なしで ResourceDictionary で宣言されている場合、x:Key 値は プロパティの値をTargetType
使用します。 スタイルを暗黙的に設定した場合、スタイルは、値からTargetType
派生した要素ではなく、正確に一致TargetType
する型にのみ適用されます。 たとえば、アプリケーション内のすべての ToggleButton コントロールに対してスタイルを暗黙的に作成し、アプリケーション ToggleButton
に および CheckBox コントロール (CheckBox
から ToggleButton
派生) がある場合、"ToggleButton" 暗黙的なスタイルはコントロールにのみ ToggleButton
適用されます。
XAML 構文に関する注意事項
セッター は の XAML コンテンツ プロパティ Style
であるため、 などの <Style><Setter .../><Setter .../></Style>
暗黙的なコレクション構文を使用できます。
コードで クラスを Style
使用する (コンストラクターを呼び出して Setter 値を 1 つずつ構築するなど) ことは非常にまれです。 スタイルはテンプレートに使用され、テンプレートは XAML 読み込み時に使用できるようにする必要があるため、コードで作成された Style
テンプレートは通常、UI のコントロールに適用するには遅すぎます。
コンストラクター
Style() |
初期 TargetType および空の Setters コレクションを使用して、Style クラスの新しいインスタンスを初期化します。 |
Style(TypeName) |
指定した初期 TargetType コレクションと空の Setters コレクションを使用して、Style クラスの新しいインスタンスを初期化します。 |
プロパティ
BasedOn |
現在のスタイルの基になる定義済みのスタイルを取得または設定します。 |
Dispatcher |
常に Windows アプリ SDK アプリで を返します |
DispatcherQueue |
このオブジェクトが |
IsSealed |
スタイルが読み取り専用で変更できないかどうかを示す値を取得します。 |
Setters |
Setter オブジェクトのコレクションを取得します。 |
TargetType |
スタイルの対象となる型を取得または設定します。
|
メソッド
ClearValue(DependencyProperty) |
依存関係プロパティのローカル値をクリアします。 (継承元 DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
依存関係プロパティに対して確立された基本値を返します。これは、アニメーションがアクティブでない場合に適用されます。 (継承元 DependencyObject) |
GetValue(DependencyProperty) |
DependencyObject から依存関係プロパティの現在の有効な値を返します。 (継承元 DependencyObject) |
ReadLocalValue(DependencyProperty) |
ローカル値が設定されている場合は、依存関係プロパティのローカル値を返します。 (継承元 DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
この DependencyObject インスタンスの特定の DependencyProperty に対する変更をリッスンするための通知関数を登録します。 (継承元 DependencyObject) |
Seal() |
スタイルをロックして、Setters コレクション内の TargetType プロパティまたは Setter を変更できないようにします。 |
SetValue(DependencyProperty, Object) |
DependencyObject の依存関係プロパティのローカル値を設定します。 (継承元 DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
RegisterPropertyChangedCallback を呼び出して以前に登録した変更通知を取り消します。 (継承元 DependencyObject) |