UserControl: Могу ли я установить свой собственный DependencyProperty в XAML? - PullRequest
2 голосов
/ 09 мая 2019

Я хотел бы иметь возможность сделать что-то вроде этого:

.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 как присоединенное свойство.

Есть ли способ достичь этого, кроме определения значения в ресурсе и последующего присвоения его свойству из codebehind?

1 Ответ

2 голосов
/ 09 мая 2019

Вы можете установить свойство по стилю:

<UserControl ...>
    <UserControl.Style>
        <Style>
            <Setter Property="local:MyControl.MyTemplate">
                <Setter.Value>
                    <DataTemplate />
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Style>
    ...
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...