0

私のアプリケーションでは、GroupBoxコントロールに次のコードを含むShinyBlue.xamlリソースディクショナリを使用します。

    <Style TargetType="{x:Type GroupBox}">

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupBox}">
                <Grid SnapsToDevicePixels="true">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="6" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="6" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="6" />
                    </Grid.RowDefinitions>
                    <Border Grid.ColumnSpan="4" Grid.RowSpan="4"
                            Background="{DynamicResource LightBrush}"
                            CornerRadius="4,4,4,4"
                            BorderThickness="1,1,1,1" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

   </Style>

これらのスタイルはすべてのアプリに共通です。Backgroundしかし、フォームの1つで、をに変更したいと思いTransparentます。プロパティのみをオーバーライドしたいのですBackgroundが、機能しません

<Style TargetType="GroupBox" BasedOn="{StaticResource {x:Type GroupBox}}">
    <Setter Property="Background" Value="Transparent"/>
</Style>

上記のコードは正しく機能しません。

特定の形式でを変更するにはどうすればよいGroupBox Backgroundですか?

4

1 に答える 1

0

ControlTemplateは、実際にはBackgroundプロパティを使用しませんが、BorderのBackgroundプロパティに具体的な値(つまり、)を割り当てます{DynamicResource LightBrush}。これで、Backgroundプロパティをローカルで設定すると、Borderが引き続きLightBrushリソースを使用するため、これは効果がありません。次のように、コントロールに正しい背景を表示するには、sを
使用する必要があります。TemplateBinding

<Style TargetType="{x:Type GroupBox}">
    <!-- set default value for the template -->
    <Setter Property="Background" Value="{DynamicResource LightBrush}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupBox}">
                <Grid SnapsToDevicePixels="true">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="6" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                        <ColumnDefinition Width="6" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="Auto" />
                        <RowDefinition Height="*" />
                        <RowDefinition Height="6" />
                    </Grid.RowDefinitions>
                    <!-- Note the new TemplateBinding for the Background property! -->
                    <Border Grid.ColumnSpan="4" Grid.RowSpan="4" Background="{TemplateBinding Background}" CornerRadius="4,4,4,4" BorderThickness="1,1,1,1" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>

このように、Borderは実際にはGroupBoxのBackgroundプロパティを使用します。デフォルトでを使用するLightBrushために、Backgroundプロパティのデフォルト値を定義するSetterを追加しました。この値は、GroupBoxのBackgroundプロパティをローカルに設定することで上書きできます。

于 2010-04-13T08:41:05.273 に答える