2012-08-01 39 views
1

基本上,我正在爲我的listitems創建一個自定義模板。一個模板將使用複選框,而另一個模板將使用射頻盒。這是爲了在多選被允許或不允許時模擬。但是,我嘗試了很多不同的方式,最有前途的是DataTemplateSelector,但是我需要創建一個依賴屬性,以便我可以傳入布爾值IsMultiSelect的值。但是,我需要在選擇器中有一個DependencyObject,而我能得到的最接近的就是contentpresenter。我知道我可以基於此獲得父控制,但這似乎是一種黑客攻擊。有什麼方法可以完成我期待的目標?基於父綁定值的ListBox ItemTemplate

回答

1

我不能完全肯定,如果我理解正確的一切,但是這可能會有所幫助:

<ListBox SelectionMode="Multiple"> 
<!--<ListBox SelectionMode="Single">--> 
    <ListBox.Items> 
     <TextBlock Text="Test 1" /> 
     <TextBlock Text="Test 2" /> 
     <TextBlock Text="Test 3" /> 
     <TextBlock Text="Test 4" /> 
     <TextBlock Text="Test 5" /> 
     <TextBlock Text="Test 6" /> 
    </ListBox.Items> 
    <ListBox.Style> 
     <Style TargetType="{x:Type ListBox}"> 
      <Style.Resources> 
       <DataTemplate x:Key="SingleSelectionModeItemTemplate"> 
        <RadioButton IsChecked="{Binding Path=IsSelected, 
                RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, 
                Mode=TwoWay}" 
           Content="{Binding}" /> 
       </DataTemplate> 
       <DataTemplate x:Key="MultiSelectionModeItemTemplate"> 
        <CheckBox IsChecked="{Binding Path=IsSelected, 
                RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, 
                Mode=TwoWay}" 
           Content="{Binding}" /> 
       </DataTemplate> 
      </Style.Resources> 
      <Style.Triggers> 
       <Trigger Property="SelectionMode" 
         Value="Single"> 
        <Setter Property="ItemTemplate" Value="{StaticResource SingleSelectionModeItemTemplate}" /> 
       </Trigger> 
       <Trigger Property="SelectionMode" 
         Value="Multiple"> 
        <Setter Property="ItemTemplate" Value="{StaticResource MultiSelectionModeItemTemplate}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListBox.Style> 
</ListBox> 
+0

比我的解決方案:)謝謝好多了一噸的簡單方法。我在風格觸發器中跳舞,但由於某種原因,我從來沒有真正想過使用SelectionMode作爲觸發器,因爲我一直在嘗試綁定。而且,我一直關注ItemTemplate中的項目設置,而不是設置ItemTemplate本身。另外,RadioButton需要一個GroupName來使它成爲單選,但這更多的是我的實現細節,而不是問題的一部分:) – 2012-08-01 05:38:17

相關問題