C# 工具栏中的扩展WPF工具箱复选框样式

C# 工具栏中的扩展WPF工具箱复选框样式,c#,wpf,combobox,wpftoolkit,C#,Wpf,Combobox,Wpftoolkit,我将xctk复选框放入工具栏中。我有一个简单的组合框旁边,这两个看起来不同。简单组合框的样式为ToolBar.ComboBoxStyleKey()。但它不适用于复选框 从ComboBox派生我自己的CheckComboBox(并且具有相同的样式)或者更改CheckComboBox的样式更简单吗 如何更改外观,使复选框看起来像组合框 左边是组合框,右边是复选框: 这是正常的视觉样式: 这是一种专注的风格: 非常感谢您的帮助。谢谢大家。您可以使用ItemTemplate轻松创建check

我将xctk复选框放入工具栏中。我有一个简单的组合框旁边,这两个看起来不同。简单组合框的样式为ToolBar.ComboBoxStyleKey()。但它不适用于复选框

从ComboBox派生我自己的CheckComboBox(并且具有相同的样式)或者更改CheckComboBox的样式更简单吗

如何更改外观,使复选框看起来像组合框

左边是组合框,右边是复选框:

  • 这是正常的视觉样式:

  • 这是一种专注的风格:


非常感谢您的帮助。谢谢大家。

您可以使用ItemTemplate轻松创建checkboxcombo。请参阅下面的代码

<Grid>
    <StackPanel>
        <ComboBox x:Name="cbo">
            <ComboBox.ItemTemplate>
                <DataTemplate DataType="local:MyCombo">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding IsChecked}"/>
                        <TextBlock Text="{Binding Name}"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </StackPanel>
</Grid>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<MyCombo> lst = new List<MyCombo>();
        for (int i = 0; i < 10; i++)
        {
            lst.Add(new MyCombo() {IsChecked = true,Name = "Name"+i});
        }
        cbo.ItemsSource = lst;
    }
}

public class MyCombo
{
    public bool IsChecked { get; set; }

    public string Name { get; set; }
}

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
List lst=新列表();
对于(int i=0;i<10;i++)
{
添加(new MyCombo(){IsChecked=true,Name=“Name”+i});
}
cbo.ItemsSource=lst;
}
}
公共级MyCombo
{
已检查公共布尔值{get;set;}
公共字符串名称{get;set;}
}

您可以使用ItemTemplate轻松创建复选框组合。请参阅下面的代码

<Grid>
    <StackPanel>
        <ComboBox x:Name="cbo">
            <ComboBox.ItemTemplate>
                <DataTemplate DataType="local:MyCombo">
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding IsChecked}"/>
                        <TextBlock Text="{Binding Name}"/>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </StackPanel>
</Grid>

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        List<MyCombo> lst = new List<MyCombo>();
        for (int i = 0; i < 10; i++)
        {
            lst.Add(new MyCombo() {IsChecked = true,Name = "Name"+i});
        }
        cbo.ItemsSource = lst;
    }
}

public class MyCombo
{
    public bool IsChecked { get; set; }

    public string Name { get; set; }
}

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
List lst=新列表();
对于(int i=0;i<10;i++)
{
添加(new MyCombo(){IsChecked=true,Name=“Name”+i});
}
cbo.ItemsSource=lst;
}
}
公共级MyCombo
{
已检查公共布尔值{get;set;}
公共字符串名称{get;set;}
}

主要问题是,我的模型没有任何IsChecked属性,因此无法拥有它。我希望通过单个选定项集合绑定和更新我的选定项,xctk CheckComboBox可以做到这一点,并且很难在新的ComboBox中再次实现。我也不能使用转换器。无论如何,你的解决方案是一个简单的解决方案。感谢主要的问题是,我的模型没有任何IsChecked属性,也不能有它。我希望通过单个选定项集合绑定和更新我的选定项,xctk CheckComboBox可以做到这一点,并且很难在新的ComboBox中再次实现。我也不能使用转换器。无论如何,你的解决方案是一个简单的解决方案。谢谢