C# WPF使用Tag元素绑定颜色
我想创建一个滑块,它有一个从黑色到特定颜色的渐变作为背景。 颜色将附加到滑块的样式中。另外,仅使用控件模板(即没有附加属性和派生控件)无法向给定控件添加额外属性 因此,我想使用Tag属性并创建了以下代码段:C# WPF使用Tag元素绑定颜色,c#,wpf,xaml,templates,C#,Wpf,Xaml,Templates,我想创建一个滑块,它有一个从黑色到特定颜色的渐变作为背景。 颜色将附加到滑块的样式中。另外,仅使用控件模板(即没有附加属性和派生控件)无法向给定控件添加额外属性 因此,我想使用Tag属性并创建了以下代码段: <Style x:Key="ColorSlider" TargetType="{x:Type Slider}"> <Setter Property="Template"> <Setter.Value> <
<Style x:Key="ColorSlider" TargetType="{x:Type Slider}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Slider}">
<Grid>
<Rectangle Grid.Column="1" Grid.Row="1">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="{TemplateBinding Tag}" Offset="0.0"/>
<GradientStop Color="Black" Offset="1.0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
....
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
....
然后像这样使用它:
<Slider Style="{StaticResource ColorSlider}" Width="100" Height="500" Tag="{StaticResource redColor}"/>
使用redColor
作为静态资源(尽管我更喜欢直接使用十六进制代码或预定义颜色键入颜色)
但是,这不起作用,知道为什么吗?不要使用编译时解析的
模板绑定
,而是使用相对资源
,模式设置为运行时解析的模板parent
TemplateBinding在编译时得到解析,但当应用staticResource时,标记的实际值将在运行时得到解析。这就是为什么你应该使用另一种方法
<GradientStop Color="{Binding Tag, RelativeSource={RelativeSource
Mode=TemplatedParent}}" Offset="0.0"/>
不要使用编译时解析的
模板绑定
,而是使用相对资源
,模式设置为运行时解析的
TemplateBinding在编译时得到解析,但当应用staticResource时,标记的实际值将在运行时得到解析。这就是为什么你应该使用另一种方法
<GradientStop Color="{Binding Tag, RelativeSource={RelativeSource
Mode=TemplatedParent}}" Offset="0.0"/>
不要使用编译时解析的
模板绑定
,而是使用相对资源
,模式设置为运行时解析的
TemplateBinding在编译时得到解析,但当应用staticResource时,标记的实际值将在运行时得到解析。这就是为什么你应该使用另一种方法
<GradientStop Color="{Binding Tag, RelativeSource={RelativeSource
Mode=TemplatedParent}}" Offset="0.0"/>
不要使用编译时解析的
模板绑定
,而是使用相对资源
,模式设置为运行时解析的
TemplateBinding在编译时得到解析,但当应用staticResource时,标记的实际值将在运行时得到解析。这就是为什么你应该使用另一种方法
<GradientStop Color="{Binding Tag, RelativeSource={RelativeSource
Mode=TemplatedParent}}" Offset="0.0"/>
谢谢,很好用。不过,您能否解释一下,为什么在这种情况下,在运行时解析绑定而不是在编译时解析绑定很重要?在回答中添加了更多详细信息。谢谢,这很好。不过,您能否解释一下,为什么在这种情况下,在运行时解析绑定而不是在编译时解析绑定很重要?在回答中添加了更多详细信息。谢谢,这很好。不过,您能否解释一下,为什么在这种情况下,在运行时解析绑定而不是在编译时解析绑定很重要?在回答中添加了更多详细信息。谢谢,这很好。但是,您能否解释一下,为什么在这种情况下,在运行时解析绑定而不是在编译时解析绑定很重要?在回答中添加了更多详细信息。