0

我创建了一个自定义控件,但我无法将属性绑定到这样的内容:

<Style TargetType="control:Pie">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="control:Pie">
                    <Border
                        Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">

                        <ContentControl Content="{Binding Path=Test}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在我的控制之下

public string Test
    {
        get { return (string)GetValue(TestProperty); }
        set { SetValue(TestProperty, value); }
    }
    public static readonly DependencyProperty TestProperty =
        DependencyProperty.Register(
            "Test",
            typeof(string),
            typeof(Pie),
            new PropertyMetadata(null));

当我创建控件时,在 Test 属性中设置了一个字符串,但视图中没有出现任何内容...

4

1 回答 1

2

TemplateBinding用于绑定到模板化控件,因此仅适用于ControlTemplate. 仅上面 2 行您已经使用 TemplateBinding 作为背景、BorderBrush 和 BorderThickness。

Binding另一方面绑定到DataContext,这是一个用于从用户那里获取“业务”相关数据的对象。它应该独立于您的控件的工作方式和

根据经验:如果您在 a 中使用普通绑定ControlTemplate,它没有 a或set RelativeSource,它通常不应出现在 ControlTemplate 或 Style 中。ElementNameSource

于 2012-06-19T10:08:49.090 回答