C# 带有复选框的Wpf组合框
我正在尝试实现一个带有复选框的组合框。我在Google/SO上找到的所有文章/资源都建议在我的业务对象中添加bool。但我希望创建一个可重用的控件。 因此,我创建了一个从combobox继承的自定义控件,并使用itemscontrol更改了弹出窗口中的控件。 这是我的XAML(为简洁起见,只添加弹出窗口的XAML) 谢谢C# 带有复选框的Wpf组合框,c#,wpf,xaml,C#,Wpf,Xaml,我正在尝试实现一个带有复选框的组合框。我在Google/SO上找到的所有文章/资源都建议在我的业务对象中添加bool。但我希望创建一个可重用的控件。 因此,我创建了一个从combobox继承的自定义控件,并使用itemscontrol更改了弹出窗口中的控件。 这是我的XAML(为简洁起见,只添加弹出窗口的XAML) 谢谢 从列表框继承 将复选框绑定到项目模板中的ListBoxItem.IsSelected(通过ItemContainerStyle将其设置为默认样式) 将SelectionMode
复选框
绑定到项目模板中的ListBoxItem.IsSelected
(通过ItemContainerStyle
将其设置为默认样式)SelectionMode
设置为Multiple
SelectedItems
然后包含您的选择。您可能还想将您的选择区域绑定到类似于逗号分隔的SelectedItems列表的东西上(例如可以通过转换器完成)。完美!在我的xaml中使用了listbox而不是itemscontrol,工作起来很有魅力。谢谢
<Popup Name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide">
<Grid Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}" MaxHeight="{TemplateBinding MaxDropDownHeight}">
<Border x:Name="DropDownBorder" Background="{StaticResource BackgroundBrush}" BorderThickness="1" BorderBrush="{StaticResource BorderBrush}" />
<ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
<ItemsControl ItemsSource="{Binding ItemsSource,RelativeSource={RelativeSource AncestorType=local:CheckedComboBox}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}" x:Name="PART_Checkbox" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</Grid>
</Popup>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (this.Template != null)
{
var v = Template.FindName("PART_Checkbox",this);
Debug.Assert(v != null);
}
}