0

多くのウィンドウとユーザーコントロールを備えたWPFアプリケーションがあり、アプリケーション全体に表示される特定のコントロールに標準スタイルを実装したいと思います。例として、アプリケーション全体で2つの標準TextBlockが必要だとします。1つは大きな見出し用、もう1つは小さな見出し用です。そして、それらの唯一の違いは、フォントサイズ、たとえばそれぞれ36と24です。他のすべてのプロパティ(色、フォントファミリなど)は、TextBlockテンプレートまたはグローバルTargetType = "{x:TypeTextBlock}"スタイルで設定できます。

もちろん、フォントサイズを設定し、それらのstaticresourceスタイルをXAML全体で自由にTextBlockに適用する、または他のTextBlockに干渉しないTextBlockの可能な限り高いレベルで、2つのグローバルな名前付きスタイルを作成することもできます。しかし、多くの場所でStyleタグを設定する必要がなくなる代替手段として、TextBlockから継承するのが良い方法ですか?

TextBlockコントロール:

class TextBlockLargeHeading : TextBlock
{
    public TextBlockLargeHeading()
    { }
}

class TextBlockSmallHeading : TextBlock
{
    public TextBlockSmallHeading()
    { }
}

グローバルリソース:

<Application.Resources>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Red" />
    </Style>
    <Style TargetType="MyApp:TextBlockLargeHeading" BasedOn="{StaticResource {x:Type TextBlock}}" >
        <Setter Property="FontSize" Value="36" />
    </Style>
    <Style TargetType="MyApp:TextBlockSmallHeading" BasedOn="{StaticResource {x:Type TextBlock}}" >
        <Setter Property="FontSize" Value="24" />
    </Style>
</Application.Resources>

次に、それらをどこでも使用するには、カスタムテキストブロックを参照するだけです。

<StackPanel>
    <MyApp:TextBlockLargeHeading Text="Large" />
    <MyApp:TextBlockSmallHeading Text="Small" />
</StackPanel>

これにより、適切なフォントサイズで2つの赤いTextBlockが作成されます。

これは合理的なアプローチですか?保守性の観点から、またはその他の方法で、これらのインスタンスが100個ある場合、落とし穴はありますか?より良い(より安全またはより少ないコード/ XAML)アプローチはありますか?おそらく代わりにユーザーコントロールを使用していますか?

ありがとう!

4

1 に答える 1

1

それをすべて行う理由はありません。スタイルを作成して直接使用します。

....
<Style x:Key="DefaultTextBlockStyle" TargetType="TextBlock">
    <Setter Property="Foreground" Value="Red" />
    <Setter Property="FontSize" Value="24" />
</Style>
<Style x:Key="LargeTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource DefaultTextBlockStyle}">
    <Setter Property="FontSize" Value="36" />
</Style>

<!-- Style applies to all TextBoxes -->
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource DefaultTextBlockStyle}" />
...

<StackPanel>
    <TextBlock Text="Large" Style="{StaticResource LargeTextBlockStyle}"/>
    <TextBlock Text="Small"/>
</StackPanel>
于 2012-04-13T22:49:23.757 に答える