带有复选框和单选按钮的TreeView

本文关键字:TreeView 单选按钮 复选框 | 更新日期: 2023-09-27 18:14:22

我想创建一个单选按钮作为一个树视图的孩子,但是当我这样做,我可以选择超过1个单选按钮。更重要的是,当我选择了一个单选按钮,我不能取消选择它。

TreeView:

<TreeView Name="tree" Margin="5" Background="LightBlue" ></TreeView>

主窗口:

public partial class MainWindow : Window
{
    private TreeViewItem createCheckBoxInTree(string content, TreeView tree)
    {
        TreeViewItem item = new TreeViewItem()
        {
            Header = new CheckBox()
            {
                Content = content
            }
        };
        tree.Items.Add(item);
        return item;
    }
    private void createRadioButtonsChildren(string content, TreeViewItem item)
    {
        TreeViewItem childRadio = new TreeViewItem()
        {
            Header = new RadioButton()
            {
                Content = content
            }
        };
        item.Items.Add(childRadio);
    }
    public MainWindow()
    {
        InitializeComponent();
        TreeViewItem parent = createCheckBoxInTree("parent", tree);
        createRadioButtonsChildren("child1", parent);
        createRadioButtonsChildren("child2", parent);
        createRadioButtonsChildren("child3", parent);
    }
}

带有复选框和单选按钮的TreeView

您可以为每个单选按钮指定组名。

 private void createRadioButtonsChildren(string content, TreeViewItem item)
    {
        TreeViewItem childRadio = new TreeViewItem()
        {
            Header = new RadioButton()
            {
                GroupName="Group1",
                Content = content
            }
        };
        item.Items.Add(childRadio);
    }

这些RadioButtons被选中而没有重置其他按钮的状态的原因是您忘记为您创建的RadioButtons设置一个组。

请记住,RadioButtons必须属于至少一个被选中的组。这就是为什么不能取消选择的原因。将cs文件中的代码更改为下面的代码,它将按照您的要求工作。

    protected string RadioButtonGroupName { get; set; }
    private TreeViewItem createCheckBoxInTree(string content, TreeView tree)
    {
        TreeViewItem item = new TreeViewItem()
        {
            Header = new CheckBox()
            {
                Content = content
            }
        };
        tree.Items.Add(item);
        return item;
    }
    private void createRadioButtonsChildren(string content, TreeViewItem item)
    {
        TreeViewItem childRadio = new TreeViewItem()
        {
            Header = new RadioButton()
            {
                Content = content,
                GroupName = RadioButtonGroupName,
            }
        };
        item.Items.Add(childRadio);
    }
    public MainWindow()
    {
        InitializeComponent();
        RadioButtonGroupName = "MyFirstGroup";
        TreeViewItem parent = createCheckBoxInTree("parent", tree);
        createRadioButtonsChildren("child1", parent);
        createRadioButtonsChildren("child2", parent);
        createRadioButtonsChildren("child3", parent);
    }

如果这解决了你的问题,请记住将此标记为接受的答案