UserControl:我可以在 XAML 中设置自己的 DependencyProperty 吗?

UserControl: Can I set my own DependencyProperty in XAML?

我希望能够做这样的事情:

.xaml.cs:

public partial class MyControl : UserControl
{
    public MyControl() => InitializeComponent();

    public static readonly DependencyProperty MyTemplateProperty = DependencyProperty.Register(
        "MyTemplate", typeof(DataTemplate), typeof(MyControl), new PropertyMetadata(default(DataTemplate)));

    public DataTemplate MyTemplate
    {
        get => (DataTemplate) GetValue(MyTemplateProperty);
        set => SetValue(MyTemplateProperty, value);
    }
}

.xaml:

<UserControl x:Class="MyControl"> <!-- etc. -->
    <Grid />

    <!-- does not compile-->
    <UserControl.MyTemplate>
        <DataTemplate />
    </UserControl.MyTemplate>
</UserControl>

但是没用。不足为奇的是,当您以 UserControl 开头元素名称时,编译器仅查找在 UserControl 本身上定义的属性。但是将元素名称更改为 <MyControl.MyTemplate>(使用正确的名称空间前缀)也不起作用;在这种情况下,编译器会尝试将 MyTemplate 解释为附加的 属性。

除了在资源中定义值然后从代码隐藏将其分配给 属性 之外,还有什么方法可以实现此目的吗?

您可以通过样式设置属性:

<UserControl ...>
    <UserControl.Style>
        <Style>
            <Setter Property="local:MyControl.MyTemplate">
                <Setter.Value>
                    <DataTemplate />
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Style>
    ...
</UserControl>