加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Metro XAML – TemplateBinding和SolidColorBrush的问题

发布时间:2020-12-14 02:16:37 所属栏目:Windows 来源:网络整理
导读:这是一个简单的自定义控件来说明我的问题 public sealed class TestControl : Control{ public static DependencyProperty TestColorProperty = DependencyProperty.Register("TestColor",typeof(Brush),typeof(TestControl),new PropertyMetadata(new Solid
这是一个简单的自定义控件来说明我的问题

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>

如您所见,我在Style setter中将TestColor Brush依赖项属性设置为Red – 覆盖我在PropertyMetaData中声明的默认值Blue.
请注意,我的模板中的边框使用TemplateBinding将背景设置为刷子,如上所述.

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

答案都不是.

如果我在我的控件中设置一个断点,此值应该可用(例如OnApplyTemplate作为示例),那么值为null,而不是预期的Red(默认值).实际上,我在控件的所有生命周期点都设置了断点,并且从不使用ProprtyMetaData中的默认值.

在样式中设置值也没有任何作用(根据我的样式设置器delaration,它没有设置为Blue.这表明样式设置器以某种方式失败了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}" />

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读