Уже есть фреймворк HeaderedContentControl и HeaderedItemsControl ...
Но если вы действительно хотите создать свой собственный, то вам, вероятно, следует использовать TemplateBinding.Вместо этого попробуйте что-то вроде этого:
class MyHeaderedControl : ContentControl
{
public static readonly DependencyProperty HeaderProperty = DependencyProperty.Register(
"Header",
typeof(object),
typeof(MyHeaderedControl),
new PropertyMetadata());
public MyHeaderedControl()
{
this.DefaultStyleKey = typeof(MyHeaderedControl);
}
}
Затем в вашем проекте создайте файл в "\ Themes \ Generic.xaml".Это файл со специальным именем, который должен находиться в корне проекта, а затем в папке «Темы».Он должен содержать ResourceDictionary.
<ResourceDictionary
xmlns="..."
xmlns:x="..."
xmlns:c="MyControlLibrary1"
>
<Style TargetType="{x:Type c:MyHeaderedControl>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type c:MyHeaderedControl}">
<StackPanel>
<ContentControl Content="{TemplateBinding Header}" />
<ContentPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Кроме того, в вашем AssemblyInfo.cs добавьте этот атрибут, если его там еще нет:
[assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly,
ResourceDictionaryLocation.SourceAssembly)]
Так что для обзора.Общая идея состоит в том, чтобы создать некоторый тип логического элемента управления, в котором у вас есть свойства, события, логика и т. Д. Затем в той же сборке вы предоставляете темы по умолчанию.Вот как элементы управления будут отображаться по умолчанию.В любом месте, где используются элементы управления, шаблоны по умолчанию могут быть переопределены, а определенные шаблоны могут быть переопределены как обычно.
Так что это самый безболезненный способ добавить пользовательский контент, подобный этому, в свои собственные элементы управления!Попробуйте один раз, и это будет иметь смысл, а не чувствовать себя грязным.Если вы делаете больше элементов управления, просто продолжайте добавлять их в файл Generic.xaml.