我想将Button ControlTemplate中的Border.Background绑定到我的按钮的Background属性。通常我会使用TemplateBinding:
<Style TargetType="Button" x:Key="ColuredButton">
<Setter Property="Background" Value="LightGreen"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="Border" CornerRadius="2" BorderThickness="1" BorderBrush="Gray">
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="{TemplateBinding Foreground}"/>
<GradientStop Color="{TemplateBinding Background}"/>
</LinearGradientBrush>
</Border.Background>
<ContentPresenter Margin="2" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但我收到错误:“如果不在模板中,则无法设置TemplateBinding”..但我在模板中! (如果我不使用LinearGradientBrush并将边框Backround属性直接绑定到{TemplateBinding Background},它就可以工作....
答案 0 :(得分:8)
正如@Snowbear所说,你应该Color
绑定到Color
而不是Color
绑定到Brush
。但在他的解决方案中,TemplateBinding
具有深Path
之类的Foreground.Color
不允许作为绑定标记的一部分。
所以请使用以下内容......
<Border.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Color="{Binding Foreground.Color,
RelativeSource={RelativeSource TemplatedParent}}"
Offset="0.2"/>
<GradientStop Color="{Binding Background.Color,
RelativeSource={RelativeSource TemplatedParent}}"
Offset="0.6"/>
</LinearGradientBrush>
</Border.Background>
它应该有用。
答案 1 :(得分:1)
我认为你可能会遇到其他一些错误,但报道不好。 GradientStop
在其相应的属性中接受Color
,而Background
的{{1}}和Foreground
属性是画笔,而不是颜色。如果您认为Button
和Background
将Foreground
,您可能会尝试访问绑定中的SolidColorBrush
属性,但我不确定它是否有效:
Color