Как выставить ItemTemplate и ContentTemplate из пользовательского элемента управления - PullRequest
0 голосов
/ 23 августа 2010

Я написал элемент управления Well, аналогичный вкладкам редактора Visual Studio, чтобы пользователь мог открыть несколько документов и одновременно просматривать один или несколько документов. Он является производным от UserControl и предоставляет ObservableCollection OpenDocuments, который привязывается к ViewModel. Если бы я реализовал это как простой 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 (еще один пользовательский элемент управления в области содержимого).

Мой элемент управления имеет ContentTemplate, но он, конечно, представляет весь элемент управления, поэтому все, что я вижу, - это DocumentView. У моего элемента управления нет ItemTemplate.

Как мне выставить ItemTemplate и ContentTemplate?

Andrew

РЕДАКТИРОВАТЬ ---------------------------------------------- ---------------------------

Спасибо за ответы. Это выглядит так: Well

Пользователь может иметь одну или несколько лунок для документов, содержащих одну или несколько вкладок. Все, к чему имеет доступ потребитель, - это список видимых вкладок и выбранный в данный момент вкладка.

Обратите внимание, что все вкладки пусты! Я не понимаю, как указать ContentTemplate для так же, как в приведенном выше примере с TabControl.

Andrew

1 Ответ

0 голосов
/ 23 августа 2010

Я немного запутался в том, как именно выглядит ваш контроль, но вот то, что я думаю, вы ищете.

Если ваш элемент управления может наследовать от ItemsControl, вы получите свойство ItemTemplate, уже определенное для вас. Все, что вам нужно сделать в шаблоне элемента управления, - это привязать свойство ItemsControl к правильному месту в шаблоне.

То же самое относится и к ContentTemplate. Если у вас уже есть свойство ContentTemplate, которое вы уже определили для своего элемента управления, вам просто нужно привязать его к правильному месту в элементе управления.

Это будет выглядеть примерно так

Контроль потребителя

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

Реализация "MyControl" сверху (полностью псевдокод)

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

Опять же, мой пример не совсем понятен, но я не уверен, как выглядит ваш контроль, и не совсем уверен, что вы спрашиваете, но, надеюсь, это поможет.

...