我正在构建一个Windows应用商店应用程序,由于UI问题,我必须在combobox中实现复选框。我遇到了以下问题:我想在“带复选框的Combobox”中显示选中的项目。 我想做的事 : http://blogs.microsoft.co.il/blogs/justguy/image_2827F1EB.png
<ComboBox x:Name="cb2"
DropDownOpened="cb2_DropDownOpened_1"
DropDownClosed="cb2_DropDownClosed_1"
SelectionChanged="cb2_SelectionChanged_1"
Width="310"
ItemsSource="{Binding Members}"
DisplayMemberPath="{Binding Name}"
Height="50" BorderBrush="#FF0A2562"
Tag="{Binding index}"
>
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox
Background="Black"
BorderBrush="Black"
Tag="{RelativeSource TemplatedParent}"
Content="{Binding Name}"
IsChecked="{Binding Path=IsSelected,Mode=OneWay}"
Unchecked="CheckBox_Unchecked_1"
Click="CheckBox_Click"
/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
代码背后:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
string k =(string) chk.Content;
chkstr.Add(k);
}
private void CheckBox_Unchecked_1(object sender, RoutedEventArgs e)
{
CheckBox chk = (CheckBox)sender;
string k = (string)chk.Content;
chkstr.Remove(k);
// vl.selectedmembers.Remove(key);
}
答案 0 :(得分:3)
在Microsoft定义的ComboBox标准模板中,在ContentPresenter中添加TextBlock。 使用string绑定TextBlock的Text属性。现在可以通过显式将项目转换为字符串将已检查的项目添加到字符串。 @Patrick:ItemTemplate和ItemContainerStyle都可以使用。
答案 1 :(得分:0)
您需要重新模板化ComboBoxItem。指定ComboBox.ItemContainerStyle而不是ComboBox.ItemTemplate。在ComboBox.ItemContainerStyle中,有一个Template的setter。复制默认模板并添加CheckBox。模板绑定CheckBox.IsChecked为IsSelected,或使用Selected视觉状态中的对象动画将IsChecked设置为true。
由于IsSelected是ComboBoxItem容器上的属性,而不是数据上下文,因此您的方法将无效。