我有一个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>
答案 0 :(得分:2)
此案例演示了attached properties的良好用法,可以在GlassButton
控件(实际类型为Button
)上定义,以便XAML中的值可以绑定到它们。一个简单的模板绑定({TemplateBinding MyAttachedProperty}
)应该可以胜任。
如果您需要特定部分的帮助,请告诉我们。