Это легко сделать с помощью атрибута ContentProperty .
Тогда вы можете определить свой код как:
[ContentProperty("Child")]
public partial class MyControl: UserControl
{
public static readonly DependencyProperty ChildProperty = DependencyProperty.Register("Child", typeof(UIElement), typeof(MyControl), null);
public UIElement Child
{
get { return (UIElement)this.GetValue(ChildProperty); }
set
{
this.SetValue(ChildProperty, value);
this.content.Content = value;
}
}
Что будет делать, это любой контент по умолчанию в ваших тегах (<MyControl Text="somecontent">main content </MyControl>
) - будет установлен как свойство Child в вашем классе. Затем, когда он установлен, вы можете назначить его любому элементу управления, который вам нравится.
Edit:
Вы можете иметь столько содержимого, сколько хотите, но вы можете иметь только 1 авто-контент (который определяется через атрибут ContentProperty).
Если вы хотите два, вы можете сделать:
<MyControl>
<MyControl.Content1>Hello World</MyControl.Content1>
<MyControl.Content2>Goodbye World</MyControl.Content2>
</MyControl>
Все, что вам нужно сделать, это убедиться, что в вашем коде есть соответствующие свойства зависимостей. Затем, когда свойство установлено, просто назначьте его родительскому элементу управления содержимым в вашем XAML.