Я создал класс PagedView
, который наследуется от ContentControl
.
Далее я определил ControlTemplate
для Foo
внутри ResourceDictionary
.
ControlTemplate
начинается следующим образом:
<ControlTemplate TargetType="controls:PagedView">
<Grid Background="White" DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type controls:PagedView}}}">
(я выбрал этот способ определения этого элемента управления, потому что мне нужно было поддерживать именованное содержимое, и пока это единственный способ, который работал)
Теперь я могу просто использовать PagedView
где-то и настроить его содержимое для моих нужд, например:
<controls:PagedView>
<TextBlock Text="FooBar" />
</controls:PagedView>
Затем я добавил еще один DependencyProperty "Header"
к PagedView
, чтобы добавитьдополнительный контент для какой-то части контроля.
В стиле PagedView
я добавил следующую строку для поддержки этого дополнительного содержимого:
<ContentPresenter Content="{Binding Header}" />
Теперь я могу добавить дополнительные элементы управления, такие как:
<controls:PagedView.Header>
<CheckBox Content="FooCheck" />
</controls:PagedView.Header>
Теперь я хотел связать свойство IsChecked
с другим свойством зависимости, определенным в Page
с использованием PagedView
, но, к сожалению, кажется, что Binding
не может быть правильно разрешено, поскольку свойство зависимости, к которому не привязаноменяются всякий раз, когда я переключаю IsChecked
состояние CheckBox
.
. Я не очень хорошо разбираюсь в правилах того, как WPF определяет правильные DataContext
для каждого элемента в пользовательском интерфейсе, так что же я?здесь не хватает?