Могу ли я использовать DataTemplateSelector в DataTemplate? - PullRequest
5 голосов
/ 31 декабря 2010

У меня есть ItemsControl, использующий StackPanel для отображения списка элементов.

Мне бы хотелось, чтобы метка отображалась для каждой строки, но чтобы содержимое слева от метки определялось с помощью DataTemplateSelector. Я не хочу переопределять метку для каждого шаблона данных, сгенерированного TemplateSelector.

Возможно ли это?

<ItemsControl ItemsSource="{Binding Path=Values}" >
 <ItemsControl.Resources>
   <v:MyTemplateSelector x:Key="myTemplateSelector"></v:MyTemplateSelector>
 </ItemsControl.Resources>
 <ItemsControl.ItemsPanel>
  <ItemsPanelTemplate>
   <StackPanel></StackPanel>
  </ItemsPanelTemplate>
 </ItemsControl.ItemsPanel>
 <ItemsControl.ItemTemplate>
  <DataTemplate>
   <WrapPanel>
    <Label>Test: </Label>
    <!--What goes here should be defined by myTemplateSelector-->
   </WrapPanel>
  </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

1 Ответ

6 голосов
/ 31 декабря 2010

Я понял это. Решением было использование элемента ContentPresenter с атрибутом ContentTemplateSelector:

    <DataTemplate>
       <WrapPanel>
          <Label>Test: </Label>
          <ContentPresenter 
              ContentTemplateSelector="{StaticResource ResourceKey=myTemplateSelector}">
          </ContentPresenter>
       </WrapPanel>
    </DataTemplate>
...