基本上,我希望为我的列表项创建一个自定义模板。一个模板将使用复选框,而另一个将使用单选框。这是为了模拟何时允许或不允许多选。但是,我尝试了许多不同的方法,最有希望的是DataTemplateSelector
,但是我需要创建一个依赖属性,以便我可以传入布尔IsMultiSelect
值。但是,我需要一个DependencyObject
在 Selector 中,我能得到的最接近的是 contentpresenter。我知道我可以以此为基础获得家长控制,但这似乎是一个黑客行为。有什么办法可以完成我想做的事情吗?
问问题
577 次
1 回答
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>
于 2012-08-01T05:28:55.883 回答