c# - 通过基于样式属性覆盖样式

标签 c# wpf resources resourcedictionary

我有一个按钮的基本样式:

<Style x:Key="ButtonStyle_base" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Name="grid" Margin="0,0,0,0">
                        <Rectangle Name="rectangle" HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" >
                            <Rectangle.Effect>
                                <DropShadowEffect BlurRadius="3" Opacity="0.4" ShadowDepth="6"/>
                            </Rectangle.Effect>
                        </Rectangle>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True" />
                        <Trigger Property="IsDefaulted" Value="True" />
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

所以,在网格中我有一个矩形。为了让我的应用程序可换肤,我在另一个资源字典中放入了一个基于此的样式:

<Style x:Key="ButtonStyle" BasedOn="{StaticResource ButtonStyle_base}">
        <Setter Property="Rectangle.Fill" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                    <GradientStop Color="#FFFFFFFF" Offset="0.5" />
                    <GradientStop Color="#CCFFFFDD" Offset="1" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>

我想要的是改变矩形的填充。它不起作用。我怎样才能做到这一点?

最佳答案

Button的Fill with Background属性绑定(bind),

<Style x:Key="ButtonStyle_base" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid Name="grid" Margin="0,0,0,0">
                        <Rectangle Name="rectangle" HorizontalAlignment="Stretch"  Fill="{TemplateBinding Background}" VerticalAlignment="Stretch" >
                            <Rectangle.Effect>
                                <DropShadowEffect BlurRadius="3" Opacity="0.4" ShadowDepth="6"/>
                            </Rectangle.Effect>
                        </Rectangle>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True" />
                        <Trigger Property="IsDefaulted" Value="True" />
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

从您派生的样式设置背景,

<Style x:Key="ButtonStyle" BasedOn="{StaticResource ButtonStyle_base}">
        <Setter Property="Background" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                    <GradientStop Color="#FFFFFFFF" Offset="0.5" />
                    <GradientStop Color="#CCFFFFDD" Offset="1" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
</Style>

关于c# - 通过基于样式属性覆盖样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661435/

相关文章:

c# - 从 F# 使用 UWP 应用服务

c# - 带有 ListView 的 c Sharp -winform 应用程序

C#-关于线程和空闲时间的几个问题

c# - Telerik RadWindow

wpf - 带有图标的 MenuItem 样式只创建一个图标

c# - Prism 嵌入图像

c# - Mvvmlight UpdateSourceTrigger 不工作

c# - YouTube API - 从用户限制获取所有视频?

java - Android - 资源未链接

java - 在 java 中定位资源时,两个类在相同代码上给出不同的输出