我正在尝试通过使行叮当响来选择列表框中的多个复选框。单击复选框内容后,效果很好。
Xaml:
<ListBox ItemsSource="{Binding Templates}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Name}"
Margin="0 2 0 0"
Style="{StaticResource BaseCheckBox}"
IsChecked="{Binding IsSelected}"
HorizontalAlignment="Stretch"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:0)
如果列表框项目仅包含复选框,则可以强制这些CheckBox
占据整个项目的宽度:
<CheckBox
Width="{Binding ActualWidth, RelativeSource={RelativeSource FindAncestor, AncestorType=ListBoxItem}}"/>
如果您的列表框项目还包含其他一些元素,事情将会变得更加复杂。
您可以例如将每个IsSelected
的{{1}}属性绑定到数据项的ListBoxItem
属性:
IsSelected
然后,您可以通过选择列表框中的项目来选中复选框。但是,选中的项目也将处于选中状态。
如果您不喜欢或不需要它,可以删除所选视觉样式:
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
答案 1 :(得分:0)
此问题的解决方案:
<ListBox ItemsSource="{Binding Templates}" Style="{StaticResource ListBoxStyle}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Focusable" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>