簡體   English   中英

如何從用戶控件公開ItemTemplate和ContentTemplate

[英]How to expose ItemTemplate and ContentTemplate from a UserControl

我編寫了一個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標頭和DocumentView(“內容”區域中的另一個用戶控件)中為我提供了Name。

我的控件有一個ContentTemplate,但是它當然代表了整個控件,所以我所看到的就是DocumentView。 我的控件沒有ItemTemplate。

如何公開ItemTemplate和ContentTemplate?

安德魯

編輯------------------------------------------------- ------------------------

感謝您的答復。 看起來像這樣: 好

用戶可以擁有一個或多個包含一個或多個選項卡的文檔孔。 消費者可以訪問的是可見選項卡列表和當前選擇的選項卡。

請注意,這些選項卡都是空的! 我不明白如何以與上述TabControl示例相同的方式為<vw:DocumentView>指定ContentTemplate。

安德魯

我對您的控件的確切外觀有些困惑,但是我認為這是您所追求的。

如果您的控件可以從ItemsControl繼承,您將獲得已經為您定義的ItemTemplate屬性。 您在控件模板中要做的就是將Template綁定ItemsControl屬性到模板中的正確位置。

同樣適用於ContentTemplate。 如果您已經為控件定義了ContentTemplate屬性,則只需將模板綁定到控件中的正確位置即可。

看起來像這樣

控制消費者

<MyControlNamespace:MyControl ContentTemplate="{StaticResource MyContentTemplate}" ItemTemplate="{StaticResource MyItemTemplate}" />

從上面實現“ MyControl”(完全偽代碼)

<MyControl>
  <ItemsPresenter ItemTemplate="{TemplateBinding ItemTemplate}" />
  <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" />
</MyControl>

同樣,我的示例並不完全有意義,但是我不確定您的控件是什么樣子,也不確定您要問的是什么,但是希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM