WPF - 覆盖样式颜色,最好的做法(WPF — override style colors, b

2019-09-23 22:39发布

我有一个GlassButton风格。 问题是,梯度是建立在风格和颜色的渐变设置。 现在,我有我喜欢的一个按钮,一个框架,但我需要不同的按钮是不同的颜色。 有没有什么办法可以“揭发”,从样式颜色属性的一个或多个在我的按钮实现重写? 以下样式:

如果没有,那么什么是做这样的事情的最佳做法? 我不希望有针对各颜色创造出不同的风格,如“GlassButtonBlue,GlassButtonGreen,GlassButtonRed” - 似乎有点小题大做?

<Style x:Key="GlassButton" TargetType="{x:Type Button}">
    <Setter Property="FontSize" Value="42" />
    <Setter Property="Foreground" Value="White" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="ButtonBorder" 
                          CornerRadius="25,25,25,25" 
                          BorderThickness="4,4,4,4" 
                          Background="CadetBlue"
                          BorderBrush="#99FFFFFF"
                          RenderTransformOrigin="0.5,0.5">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*"/>
                            <RowDefinition Height="2.6*"/>
                        </Grid.RowDefinitions>
                        <Border Grid.Row="0" CornerRadius="23,23,0,0">
                            <Border.Background>
                                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                    <GradientStop x:Name="test" Color="#08FFFFFF" Offset="0"/>
                                    <GradientStop Color="#88FFFFFF" Offset="1"/>
                                </LinearGradientBrush>
                            </Border.Background>
                        </Border>
                        <ContentPresenter x:Name="ButtonContentPresenter"                               
                            VerticalAlignment="Center"  
                            Grid.RowSpan="2" 
                            HorizontalAlignment="Center"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="RenderTransform" TargetName="ButtonBorder">
                            <Setter.Value>
                                <TransformGroup>
                                    <ScaleTransform ScaleX="0.9" ScaleY="0.9"/>
                                </TransformGroup>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Answer 1:

这个案例展示了良好的使用了附加属性 ,它可以在你的定义GlassButton控制(输入的Button实际上),以便在您的XAML值可以绑定到他们。 一个简单的模板结合( {TemplateBinding MyAttachedProperty}应该做的工作。

给一个去,让我知道你是否需要在特定部分的任何帮助。



文章来源: WPF — override style colors, best practice