Dea*_*alk 5 xaml microsoft-metro windows-8 windows-runtime winrt-xaml
这是一个简单的自定义控件来说明我的问题
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它具有单个Brush
依赖项属性,默认值为Blue
(PropertyMetaData
如上所示设置).
这是我控制的XAML Generic.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>
Run Code Online (Sandbox Code Playgroud)
如您所见,我在设置器中将TestColor
Brush依赖项属性设置为Red Style
- 覆盖我在PropertyMetaData中声明的默认值Blue.请注意,我的模板中的边框TemplateBinding
用于设置画笔的背景,如上所述.
那么你认为边框背景设置的是什么颜色?红色还是蓝色?
答案都不是.
如果我在我的控件中设置了一个断点,此值应该可用(例如,OnApplyTemplate
作为示例),则值为null,而不是预期的Red(默认值).实际上,我在控件的所有生命周期点都设置了断点,并且从不使用ProprtyMetaData中的默认值.
在样式中设置值也没有任何作用(根据我的样式设置器delaration,它没有设置为Blue.这表明样式设置器以SolidColorBrush
某种方式失败.
但是,这有效
public BlankPage()
{
this.InitializeComponent();
testcont.TestColor = new SolidColorBrush(Colors.Orange);
}
Run Code Online (Sandbox Code Playgroud)
这也有效:
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
<local:TestControl TestColor="Green" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
但是TemplateBinding
只是不起作用,这很重要,因为我试图编写可重复使用的自定义控件.
这是一个错误吗?
院长
就我个人而言,我认为这是 xaml 解析器中某个地方的错误。尝试这样的事情,它应该有效:
<Setter Property="SelectedDayBrush">
<Setter.Value>
<SolidColorBrush>#7F7F7F7F</SolidColorBrush>
</Setter.Value>
</Setter>
<Setter Property="SelectedDayBrush">
<Setter.Value>
<SolidColorBrush Color="Orange"/>
</Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2066 次 |
最近记录: |