而在WPF中继承样式会影响父样式

时间:2015-06-22 10:13:54

标签: c# xaml styles wpf-controls

在WPF中,我有一个控件样式,如下所示,

 <Style TargetType="local:CustomControl">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderBrush" Value="Gray" />
    <Setter Property="BorderThickness" Value="0,0,0,1" />
    <Setter Property="Padding" Value="3,0,3,0" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
 </Style>

现在我需要为下面的其他地方覆盖自定义控件边框,

<Style TargetType="local:CustomControl" BasedOn="{StaticResource  {x:Type local:CustomControl}}">
    <Setter Property="BorderThickness" Value="1" />
</Style>

我的问题是,当我使用上面的代码时,它会覆盖第一个编写的代码。是我的代码是正确的。

注意:基本样式仅使用目标类型编写。我需要在其他地方覆盖该控制边框而不影响基本代码。

有可能吗?请帮我解决这个问题。

提前感谢。

2 个答案:

答案 0 :(得分:2)

如果您声明Style 没有 x:Key,它将覆盖该控件的默认样式。

<Style TargetType="local:CustomControl">

因此,上面的代码将在整个应用程序(或范围内)中影响所有 CustomControl元素。

如果您想要覆盖基本样式,则可以Style x:Key <Style TargetType="local:CustomControl" x:Key="MyAwesomeStyle"> ,如下所示:

Style

创建控件时,您必须引用<local:CustomControl Style="{DynamicResource MyAwesomeStyle}" ... /> 。这是一个例子:

{{1}}

答案 1 :(得分:0)

我偶然看到了一些可以解决上述问题的例子。在您的示例中,已使用自定义控件,在我的示例中 - 按钮。

        <Grid>
            <Button Style="{StaticResource AddButtonStyle}" Tag="Add" Click="addClick" />
        </Grid>

AddButtonStyle的代码:

       <Style x:Key="AddButtonStyle" TargetType="Button" BasedOn="{StaticResource AppBarButtonStyle}">
          <Setter Property="Content" Value="&#x2705;"/>
       </Style>

基于AppBarButtonStyle的AddButtonStyle。下面是代码。

        <Style x:Key="AppBarButtonStyle" TargetType="Button">
        <Setter Property="MinWidth" Value="40" />
        <Setter Property="Width" Value="100" />
        <Setter Property="Height" Value="88" />
        <Setter Property="HorizontalAlignment" Value="Right" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="FontFamily" Value="Segoe UI Symbol" />
        <Setter Property="FontSize" Value="18" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">. . .
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在此示例基础上,您必须使用x:Key声明Style,并且不应在继承样式中为Content(在您的示例中为BorderThickness)属性设置任何值。