TreeView与复选框和单选按钮

时间:2014-07-22 11:57:26

标签: c# xml wpf

我想创建radiobuttons作为treeviewitem的孩子,但是当我这样做时,我可以选择1个以上的radiobutton。当我选择1个radiobutton时,我无法取消选择它。

的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);
    }
}

2 个答案:

答案 0 :(得分:1)

选择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);
    }

如果能解决您的问题,请记得将此标记为已接受的答案。

答案 1 :(得分:1)

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

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