2012-05-18 12 views
8

Potrzebuję ustawić właściwość ItemsPanelTemplate w polu listy na podstawie właściwości zależności na formancie. W jaki sposób mogę użyć DataTemplateSelector, aby to zrobić?ItemsPanelTemplate Selector w wpf?

mam coś takiego:

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <!-- Here I need to replace with either a StackPanel or a wrap panel--> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

Dzięki

Odpowiedz

15

Nie jest ItemsPanelSelector (prawdopodobnie dlatego, że nie jest DataTemplate), ale można powiązać go lub użyć Trigger

Binding przykład

<ListBox ItemsPanel="{Binding RelativeSource={RelativeSource Self}, 
           Path=Background, 
           Converter={StaticResource MyItemsPanelConverter}}"> 

Trigger w Style przykład

<ListBox ItemsSource="{Binding Source={x:Static Fonts.SystemFontFamilies}}"> 
    <ListBox.Style> 
     <Style TargetType="ListBox"> 
      <Setter Property="ItemsPanel"> 
       <Setter.Value> 
        <ItemsPanelTemplate> 
         <StackPanel/> 
        </ItemsPanelTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <!-- Your Trigger.. --> 
       <Trigger Property="Background" Value="Green"> 
        <Setter Property="ItemsPanel"> 
         <Setter.Value> 
          <ItemsPanelTemplate> 
           <WrapPanel/> 
          </ItemsPanelTemplate> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.Style> 
</ListBox> 
+0

Świetne. Dziękuję za dostarczenie próbki kodu. To bardzo mi pomogło. Kciuki w górę mego przyjaciela. – user1202434

0

myślę najlepszą trasę tutaj byłoby użyć stylu dla pola listy i ustawić wyzwalacze, które zmieniają ItemsPanel oparta na DependencyProperty ciebie odniesienie.