在wpf中按行选择列表框内的多个复选框

时间:2019-01-11 06:42:18

标签: c# wpf xaml

我正在尝试通过使行叮当响来选择列表框中的多个复选框。单击复选框内容后,效果很好。
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>

2 个答案:

答案 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>