我编写了一个Well控件,类似于Visual Studio编辑器选项卡,这样用户可以打开多个文档,并且可以一次查看一个或多个文档。它派生自UserControl,并公开绑定到ViewModel的OpenDocuments的ObservableCollection。如果我将它实现为一个简单的TabControl,那么它将是它的外观:
<TabControl
Grid.Row="1"
Grid.Column="1"
ItemsSource="{Binding OpenDocuments}"
SelectedItem="{Binding SelectedTab, Mode=TwoWay}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Name}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<vw:DocumentView />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
这为我提供了tabitem标题中的Name和DocumentView(内容区域中的另一个用户控件)。
我的控件有一个ContentTemplate,但它当然代表了整个控件,所以我所看到的就是DocumentView。我的控件没有ItemTemplate。
如何公开ItemTemplate和ContentTemplate?
安德鲁
EDIT ---------------------------------------------- ---------------------------
感谢您的回复。它看起来像这样:
用户可以拥有一个或多个包含一个或多个标签的文档孔。所有消费者都可以访问的是可见选项卡列表和当前选定的tabitem。
请注意,标签全部为空!我不明白如何为&lt; vw:DocumentView&gt;指定ContentTemplate。与上面的TabControl示例相同。
安德鲁
答案 0 :(得分:0)
我对你的控件看起来有点困惑,但这就是我认为你所追求的。
如果您的控件可以从ItemsControl继承,您将获得已为您定义的ItemTemplate属性。您在控制模板中所要做的就是将ItemsControl属性模板绑定到模板中的正确位置。
同样适用于ContentTemplate。如果已经为您控制了ContentTemplate属性,则只需要将模板绑定到控件中的正确位置。
它看起来像这样
控制消费者
<MyControlNamespace:MyControl ContentTemplate="{StaticResource MyContentTemplate}" ItemTemplate="{StaticResource MyItemTemplate}" />
从上面实施“MyControl”(完全伪代码)
<MyControl>
<ItemsPresenter ItemTemplate="{TemplateBinding ItemTemplate}" />
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" />
</MyControl>
同样,我的例子并不完全有意义,但我不确定你的控件是什么样的,并不完全确定你在问什么,但希望这会有所帮助。