[英]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.