如何从UserControl公开ItemTemplate和ContentTemplate

时间:2010-08-23 16:03:53

标签: wpf wpf-controls

我编写了一个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 ---------------------------------------------- ---------------------------

感谢您的回复。它看起来像这样: Well

用户可以拥有一个或多个包含一个或多个标签的文档孔。所有消费者都可以访问的是可见选项卡列表和当前选定的tabitem。

请注意,标签全部为空!我不明白如何为&lt; vw:DocumentView&gt;指定ContentTemplate。与上面的TabControl示例相同。

安德鲁

1 个答案:

答案 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>

同样,我的例子并不完全有意义,但我不确定你的控件是什么样的,并不完全确定你在问什么,但希望这会有所帮助。

相关问题