2010-12-31 14 views
5

Mam ItemControl przy użyciu StackPanel do wyświetlania listy elementów.Czy mogę użyć DataTemplateSelector w DataTemplate?

Chciałbym, aby etykieta pojawiała się dla każdego wiersza, ale dla zawartości po lewej stronie etykiety, która zostanie zdefiniowana przez DataTemplateSelector. Nie chcę przedefiniować etykiety dla każdego DataTemplate generowanego przez TemplateSelector.

Czy to możliwe?

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

Odpowiedz

6

Wymyśliłem to. Rozwiązaniem było użycie elementu ContentPresenter z atrybutem ContentTemplateSelector:

<DataTemplate> 
     <WrapPanel> 
      <Label>Test: </Label> 
      <ContentPresenter 
       ContentTemplateSelector="{StaticResource ResourceKey=myTemplateSelector}"> 
      </ContentPresenter> 
     </WrapPanel> 
    </DataTemplate> 
Powiązane problemy