gpt4 book ai didi

xaml - Metro XAML - TemplateBinding 和 SolidColorBrush 的问题

转载 作者:行者123 更新时间:2023-12-03 17:56:28 24 4
gpt4 key购买 nike

这是一个简单的自定义控件来说明我的问题

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 中设置,如上所示。

这是我在 Generic.xaml 中的控件的 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>

如您所见,我设置了 TestColorStyle 中将依赖属性刷为红色setter - 覆盖在我的 PropertyMetaData 中声明的 Blue 的默认值。
请注意,我的模板中的边框使用 TemplateBinding按照讨论将背景设置为画笔。

那么您认为边框背景设置为什么颜色?红色还是蓝色?

答案是两者都不是。

如果我在控件中的某个地方设置了一个断点,该值应该可用(例如 OnApplyTemplate 作为示例),则该值为空,而不是预期的红色(默认)。事实上,我在控件中的所有生命周期点都设置了断点,并且从未使用过 ProprtyMetaData 中的默认值。

在样式中设置值也没有任何作用(根据我的样式 setter 声明,它没有设置为蓝色。这表明样式 setter 以某种方式失败了 SolidColorBrush

但是,这有效
public BlankPage()
{
this.InitializeComponent();
testcont.TestColor = new SolidColorBrush(Colors.Orange);
}

这也有效:
<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
<local:TestControl TestColor="Green" />
</Grid>

但是 TemplateBinding只是不起作用,这很重要,因为我正在尝试编写可重复使用的自定义控件。

这是一个错误吗?

院长

最佳答案

这是我们正在寻求解决的问题。同时,设置如下:

<SolidColorBrush x:Key="DefaultTestColorBrush">Red</SolidColorBrush>

然后在您的模板中:
<Setter Property="TestColor" Value="{StaticResource DefaultTestColorBrush}" />

那么你现在应该能够清除这个障碍。

关于xaml - Metro XAML - TemplateBinding 和 SolidColorBrush 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823417/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com