Я хотел бы иметь возможность сделать что-то вроде этого:
.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?