如何使多选组合框的整个项目区域可点击

时间:2014-10-30 13:31:33

标签: c# .net wpf combobox

我有一个带有以下datatemplate

的多选组合框
<DataTemplate>
   <CheckBox HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"Content="{BindingTitle}"
                          IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"
                           Click="CheckBox_Click"/>
</DataTemplate

当我点击复选框或复选框文本时,组合框中的项目被选中,但是当在复选框区域外单击时,我希望它是选择的组合框项目,但令我惊讶的是它没有被选中。这是一个错误还是预期的行为。

有关如何使整个区域可点击的任何帮助。

2 个答案:

答案 0 :(得分:0)

您已在错误的元素上将HorizontalContentAlignment属性设置为True ...您应该将其设置为集合控件上的True,而不是:

  

获取或设置控件的内容的水平对齐方式。

<ListBox ItemsSource="{Binding SomeCollection}" HorizontalContentAlignment="Stretch" />

更新&gt;&gt;&gt;

这个 工作,如果它不适合你,那是因为你必须让其他一些XAML元素妨碍你。在新项目中尝试这个非常简单的示例

<DataTemplate DataType="{x:Type System:Boolean}">
    <CheckBox Content="Hello" IsChecked="{Binding ., Mode=TwoWay}" />
</DataTemplate>

...

<ListBox ItemsSource="{Binding SomeCollection}" HorizontalContentAlignment="Stretch" />

...

SomeCollection = new ObservableCollection<bool>();
SomeCollection.AddRange(new bool[] { true, false, true, true, false };

答案 1 :(得分:0)

将此添加到您的组合框:

 <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                <Setter Property="VerticalContentAlignment" Value="Stretch" />
            </Style>
 </ComboBox.ItemContainerStyle>

项目容器负责项目外部的点击,默认情况下值不是拉伸,所以这应该排序,可能是边缘的一些边距,取决于样式