基本的に、リスト項目用のカスタム テンプレートを作成しようとしています。1 つのテンプレートはチェックボックスを使用し、もう 1 つのテンプレートはラジオボックスを使用します。これは、複数選択が許可されているかどうかをエミュレートするためのものです。ただし、さまざまな方法を試しましたが、最も有望なのは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 に答える