情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Style クラス

2013/12/12

型のインスタンスの間で共有できるプロパティの set アクセス操作子を格納します。

Namespace:  System.Windows
アセンブリ:  System.Windows (System.Windows.dll 内)
XAML の XMLNS: xmlns にマップされていません。

[ContentPropertyAttribute("Setters", true)]
public sealed class Style : DependencyObject
<Style .../>
-or-
<Style ...>
  oneOrMoreSetters
</Style>

XAML 値

oneOrMoreSetters

SetterBase から派生するオブジェクトの 1 つ以上のオブジェクト要素。通常、これらは Setter オブジェクト要素です。

Style 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッドStyle()Style クラスの新しいインスタンスを初期化します。
パブリック メソッドStyle(Type)指定した Type で使用する Style クラスの新しいインスタンスを初期化します。
このページのトップへ

  名前説明
パブリック プロパティBasedOn現在のスタイルの基になる定義済みのスタイルを取得または設定します。
パブリック プロパティDispatcherこのオブジェクトに関連付けられている Dispatcher を取得します。 (DependencyObject から継承されます。)
パブリック プロパティIsSealedスタイルが読み取り専用で変更できないかどうかを示す値を取得します。
パブリック プロパティSettersSetter オブジェクトのコレクションを取得します。
パブリック プロパティTargetTypeこのスタイルの対象となる型を取得または設定します。
このページのトップへ

  名前説明
パブリック メソッドCheckAccess呼び出しスレッドが、このオブジェクトにアクセスできるかどうかを判断します。 (DependencyObject から継承されます。)
パブリック メソッドClearValue依存関係プロパティのローカル値をクリアします。 (DependencyObject から継承されます。)
パブリック メソッドEquals(Object)指定した Object が、現在の Object と等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッドFinalizeObject がガベージ コレクションで再利用される前に、Object がリソースを解放して他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドGetAnimationBaseValueアニメーションがアクティブでない場合に適用される、Windows Phone 依存関係プロパティに対し設定されている基本値を返します。 (DependencyObject から継承されます。)
パブリック メソッドGetHashCode特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドGetValueDependencyObject から依存関係プロパティの現在の有効値を返します。 (DependencyObject から継承されます。)
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッドReadLocalValueローカル値が設定されている場合、依存関係プロパティのローカル値を返します。 (DependencyObject から継承されます。)
パブリック メソッドSealTargetType プロパティまたは Setters コレクション内の Setter を変更できないように、このスタイルをロックします。
パブリック メソッドSetValueDependencyObject で依存関係プロパティのローカル値を設定します。 (DependencyObject から継承されます。)
パブリック メソッドToString現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
このページのトップへ

Style スタイルは、基本的に、同じ型の複数のインスタンスに適用される一連のプロパティ設定です。Style は、1 つ以上の Setter オブジェクトのコレクションを格納します。各 Setter は、PropertyValue を持ちます。Property は、スタイルの適用先となる要素のプロパティの名前です。Value は、プロパティに適用される値です。

メモメモ:

setter のコレクションに、同じ Property を持つ setter が複数ある場合は、最後に宣言した setter が使用されます。同様に、スタイル内で値を設定したプロパティと同じプロパティの値を直接要素で設定した場合は、直接要素で設定した値が優先されます。

FrameworkElement から派生する任意の要素に対して Style を設定できます。スタイルは、x:Key 属性を使用して、XAML ファイルの Resources セクション内のリソースとして宣言し、StaticResource として参照するのが最も一般的です。スタイルはリソースであるため、すべてのリソースに適用されるスコープ規則が適用されます。したがって、スタイルをどこで宣言するかは、スタイルの適用対象に影響します。たとえば、アプリケーション定義 XAML ファイルのルート要素でスタイルを宣言すると、そのスタイルはアプリケーション内のあらゆる場所で使用できます。

Style を作成するときは、TargetType プロパティを設定する必要があります。設定を行わないと、例外がスローされます。

スタイル内で設定されているプロパティの値を個別に変更できます。たとえば、Template プロパティが既にスタイルで設定されているとき、実行時にこのプロパティを設定できます。Setters でコレクションに setter を追加することもできます。ただし、読み込まれたオブジェクトによって使用されている Style は、使用が開始された直後にシールされたと考える必要があります。この状態を検出するには、StyleIsSealed プロパティの値を確認します。スタイルが使用中と見なされるのは、オブジェクト ツリーおよびルート ビジュアルに関連する読み込み済みのオブジェクトで参照された直後です。これは、Style プロパティが設定されたオブジェクトが Loaded イベントを発生させたときに検出できます。

FrameworkElement.Style プロパティを設定して、組み込みの既定スタイルをオーバーライドできます。同じスタイルを複数回設定しても、例外は発生しません。

プログラムで名前付きのスタイルを要素に割り当てるには、リソース コレクションからスタイルを取得して、要素の FrameworkElement.Style プロパティに割り当てます。リソース コレクション内の項目は Object 型です。したがって、取得したスタイルを Style オブジェクトにキャストしてから FrameworkElement.Style プロパティに割り当てる必要があります。たとえば、定義済みの TitleText スタイルを、textblock1 という名前の TextBlock に設定するには、次のコードを実行します。

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

textblock1.Style = DirectCast((Me.Resources("TitleText")), Style)

暗黙のスタイル

Windows Phone OS 7.1 では、スタイルを暗黙で設定できます。つまり、特定のスタイルのすべての要素に特定のスタイルを適用できます。<Style> リソースを x:Key 値なしで宣言した場合は、TargetType プロパティの値が x:Key 値になります。スタイルを暗黙で設定した場合は、TargetType と正確に一致する型にのみスタイルが適用され、TargetType 値から派生した要素には適用されません。たとえば、すべての ToggleButton コントロール アプリケーションのスタイルを暗黙で作成し、およびアプリケーションに ToggleButton コントロールおよび CheckBox コントロール (CheckBoxToggleButton から派生します) がある場合は、スタイルが ToggleButton コントロールにのみ適用されます。

BasedOn スタイル

既存のスタイルに基づいて新しいスタイルを作成できます。それには、BasedOn プロパティを使用します。これにより、コードの重複が削減され、リソースが管理しやすくなります。各スタイルでサポートされる BasedOn スタイルは 1 つだけです。詳細については、BasedOn プロパティのトピックを参照してください。

次の例では、2 つのスタイルを作成します。1 つは TextBlock 用でもう 1 つは TextBox 用です。それぞれのスタイルを TextBlock コントロールの 2 つのインスタンスと、TextBox コントロールの 2 つのインスタンスに適用することによって、各コントロールの外観に統一感を持たせています。この例では、StyleStaticResource として参照して、各コントロールの FrameworkElement.Style プロパティを設定します。

TextBox のスタイルで、Margin プロパティが 4 に設定されている点に注目してください。これは、TextBox の上下左右の余白を 4 に設定することを意味します。"Last Name" の方が "First Name" よりも文字数が少ないので、2 つ目の TextBlock は、1 つ目の TextBlock よりも短くなります。その分の誤差を調整するため、2 つ目の TextBoxMargin プロパティには "6,4,4,4" という値を割り当てています。その結果、2 つ目の TextBox の余白はスタイルによって指定されているものではなく、その左右の位置が 1 つ目の TextBox の位置とちょうど揃うように調整されます。


<StackPanel>
  <StackPanel.Resources>
      <!--Create a Style for a TextBlock that uses some 
          values from the Theme Resources for Windows Phone 
          (http://msdn.microsoft.com/en-us/library/ff769552(v=VS.92).aspx).-->
      <Style TargetType="TextBlock" x:Key="TextBlockStyle">
              <Setter Property="Foreground" Value="{StaticResource PhoneSubtleColor}"/>
              <Setter Property="Margin" Value="{StaticResource PhoneMargin}"/>
              <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/>
      <Setter Property="VerticalAlignment" Value="Center"/>
      </Style>

      <!--Create a Style for a TextBox that uses some 
          values from the Theme Resources for Windows Phone 
          (http://msdn.microsoft.com/en-us/library/ff769552(v=VS.92).aspx).-->
      <Style TargetType="TextBox" x:Key="TextBoxStyle">
          <Setter Property="Width" Value="300"/>
          <Setter Property="Height" Value="70"/>
          <Setter Property="Margin" Value="{StaticResource PhoneMargin}"/>
          <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/>
          <Setter Property="Background" Value="{StaticResource PhoneAccentColor}" />
    </Style>
  </StackPanel.Resources>

  <!--Apply the TextBlockStyle and TextBoxStyle to each 
          TextBlock and TextBox, respectively.-->
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              First Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}"/>
  </StackPanel>
  <StackPanel Orientation="Horizontal">
    <TextBlock Style="{StaticResource TextBlockStyle}">
              Last Name:
          </TextBlock>
    <TextBox Style="{StaticResource TextBoxStyle}" />
  </StackPanel>
</StackPanel>


暗黙のスタイル

次の例では、2 つのスタイル要素を作成しています。最初のスタイル要素の TargetTypeTextBox に設定され、2 つ目のスタイル要素の TargetTypeButton に設定されます。その後に、これらが暗黙で TextBox コントロールと Button コントロールに適用されます。


<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Foreground" Value="Blue" />
            <Setter Property="FontSize" Value="24" />                
        </Style>

        <Style TargetType="Button">
            <Setter Property="Foreground" Value="Black" />
            <Setter Property="Background" Value="Yellow" />
        </Style>
    </StackPanel.Resources>

    <TextBox Height="75" Width="300" Margin="2" Text="TextBoxStyle" />
    <Button Height="100" Width="200" Margin="2" Content="ButtonStyle" />
</StackPanel>


BasedOn スタイル

次の例では、BaseStyle という名前の Style に基づく、InheritedStyle という名前の Style を作成しています。InheritedStyle は、BaseStyle から、YellowBackground 値を継承し、BlueForeground 値を追加します。


<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>


Windows Phone OS

サポート: 8.0, 7.1, 7.0

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

表示: