这是一个简单的自定义控件来说明我的问题
public sealed class TestControl : Control
{
public static DependencyProperty TestColorProperty = DependencyProperty.Register("TestColor", typeof(Brush), typeof(TestControl), new PropertyMetadata(new SolidColorBrush(Colors.Blue)));
public Brush TestColor
{
get { return (Brush)GetValue(TestColorProperty); }
set { SetValue(TestColorProperty, value); }
}
public TestControl()
{
this.DefaultStyleKey = typeof(TestControl);
}
}
如您所见,它有一个Brush
依赖属性,默认值为Blue
(PropertyMetaData
如上图所示。
这是我控制的 XAMLGeneric.xaml
<Style TargetType="local:TestControl">
<Setter Property="TestColor" Value="Red" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:TestControl">
<Border
Background="{TemplateBinding TestColor}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBlock Text="TEST" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如您所见,我TestColor
在 setter 中将 Brush 依赖属性设置为 Red Style
- 覆盖我的 PropertyMetaData 中声明的 Blue 的默认值。请注意,我的模板中的边框用于TemplateBinding
将背景设置为所讨论的画笔。
那么你认为边框背景设置了什么颜色?红色还是蓝色?
答案都不是。
如果我在我的控件中设置了一个断点,该值应该可用(OnApplyTemplate
例如),那么该值为空,而不是预期的红色(默认)。事实上,我在控件的所有生命周期点都设置了断点,并且从未使用过 ProprtyMetaData 中的默认值。
在样式中设置值也无济于事(根据我的样式设置器声明,它没有设置为蓝色。这表明样式设置器以SolidColorBrush
某种方式失败。
但是,这有效
public BlankPage()
{
this.InitializeComponent();
testcont.TestColor = new SolidColorBrush(Colors.Orange);
}
这也有效:
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
<local:TestControl TestColor="Green" />
</Grid>
但这TemplateBinding
不起作用,这很重要,因为我试图编写可重用的自定义控件。
这是一个错误吗?
院长