オルタナティブ・ブログ > IT's my business >

IT業界のコメントマニアが始めるブログ。いつまで続くのか?

(XAML#03)「リソースを定義する場所」

»

WPF では、アプリケーション中で共通化して利用するオブジェクトをリソース(Resources)として定義できます。通常、ウィンドウ定義で使うものは、Window に、アプリケーション全体で使う場合は Application に定義します。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>

    </Window.Resources>
    <Grid>
    ......

Xaml3

この Resources プロパティは、WPF の多くのコントロールの基礎となっている FrameworkElement クラスで定義されているもので、Window や Application クラスには限定されません。たとえば、Grid や StackPanel のようなレイアウト、あるいは Button や TextBox などのコントロールも FrameworkElement から継承されているため、Resources プロパティを使うことができます。

リソースは、定義されたコントロールの内側でのみ参照されます。リソースを Grid で定義すると、その Grid 自身や Grid 上に配置されたコントロールでしか参照できません。以下は、Grid 上に 2 つの StackPanel を配置し、それぞれのリソースでスタイルを定義している例です。x:Key 属性を指定しないスタイル定義は TargetType で指定される型のコントロールすべてに適用されますが、以下ではそれぞれの StackPanel 上のボタンに、それぞれのリソースで定義されたスタイルのみが適用されています。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="0">
        <StackPanel.Resources>
            <!-- この StackPanel上のコントロールだけに適用されるスタイル -->
                <Style TargetType="{x:Type Button}">
                <Setter Property="FontWeight" Value="Bold" />
            </Style>
        </StackPanel.Resources>
        <Button Content="Alpha" />
        <Button Content="Beta" />
        <Button Content="Gamma" />
    </StackPanel>
    <StackPanel Grid.Column="1">
        <StackPanel.Resources>
            <!-- この StackPanel上のコントロールだけに適用されるスタイル -->
            <Style TargetType="{x:Type Button}">
                <Setter Property="FontStyle" Value="Italic" />
            </Style>
        </StackPanel.Resources>
        <Button Content="One" />
        <Button Content="Two" />
        <Button Content="Three" />
    </StackPanel>
</Grid>

Comment(0)