Wpf 模板绑定到背景和前景颜色?
我正在为一个按钮构建一个简单的控件模板。我想画一个2色渐变,并绑定这两种颜色,这样我就不需要在模板中硬编码它们。但由于背景和前景是画笔,而不仅仅是颜色,我不确定这是否可行 有谁能告诉我有没有好办法?这似乎很简单。谢谢Wpf 模板绑定到背景和前景颜色?,wpf,templates,binding,Wpf,Templates,Binding,我正在为一个按钮构建一个简单的控件模板。我想画一个2色渐变,并绑定这两种颜色,这样我就不需要在模板中硬编码它们。但由于背景和前景是画笔,而不仅仅是颜色,我不确定这是否可行 有谁能告诉我有没有好办法?这似乎很简单。谢谢 <ControlTemplate x:Key="ElipseButton" TargetType="Button"> <Ellipse> <Ellipse.Fill> <RadialGradientBrush Radius
<ControlTemplate x:Key="ElipseButton" TargetType="Button">
<Ellipse>
<Ellipse.Fill>
<RadialGradientBrush RadiusX="1" RadiusY="1" GradientOrigin="0.7,0.8">
<GradientStop Color="White" Offset="0"/>
<GradientStop Color="Black" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</ControlTemplate>
我想用模板绑定替换“黑”和“白”颜色。就我个人而言,我只想把整个画笔放到你的模板中。这为您以后提供了更多的控制,因为它允许您(通过模板更改)将笔刷从径向渐变更改为线性渐变等。您可以使用附加属性添加一些新的颜色属性,您可以在按钮上使用这些属性:
public class ColorExtensions
{
public static readonly DependencyProperty ColorFrontProperty = DependencyProperty.RegisterAttached(
"ColorFront",
typeof(Color),
typeof(ColorExtensions),
new UIPropertyMetadata(Colors.White));
public static Color GetColorFront(DependencyObject target)
{
return (Color)target.GetValue(ColorFrontProperty);
}
public static void SetColorFront(DependencyObject target, Color value)
{
target.SetValue(ColorFrontProperty, value);
}
public static readonly DependencyProperty ColorBackProperty = DependencyProperty.RegisterAttached(
"ColorBack",
typeof(Color),
typeof(ColorExtensions),
new UIPropertyMetadata(Colors.Black));
public static Color GetColorBack(DependencyObject target)
{
return (Color)target.GetValue(ColorBackProperty);
}
public static void SetColorBack(DependencyObject target, Color value)
{
target.SetValue(ColorBackProperty, value);
}
}
然后,您可以在任何实例上设置它们,并使用普通绑定在模板中访问它们(TemplateBindings在这里不起作用):
为什么
梯度停止
不接受模板绑定
?
<Button Content="Click Me" local:ColorExtensions.ColorFront="Red">
<Button.Template>
<ControlTemplate TargetType="Button">
<Ellipse>
<Ellipse.Fill>
<RadialGradientBrush RadiusX="1" RadiusY="1" GradientOrigin="0.7,0.8">
<GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:ColorExtensions.ColorFront)}" Offset="0"/>
<GradientStop Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(local:ColorExtensions.ColorBack)}" Offset="1"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
</ControlTemplate>
</Button.Template>
</Button>