xaml c#treeview复选框X取消选中所有其他复选框

xaml c#treeview复选框X取消选中所有其他复选框,c#,xaml,checkbox,treeview,C#,Xaml,Checkbox,Treeview,我有这个xaml。我需要取消选中所有其他复选框。我只允许检查一个其他单词。我在运行时添加了treeviewitem <TreeView Name="treeView_max" > <TreeView.Resources> <Style TargetType="{x:Type TreeViewItem}"> <Setter Property="HeaderTemplate">

我有这个xaml。我需要取消选中所有其他复选框。我只允许检查一个其他单词。我在运行时添加了treeviewitem

<TreeView Name="treeView_max" >
    <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" >
                            <CheckBox Name="chk" Margin="2" Tag="{Binding}" Checked="checkBox_Checked">
                            </CheckBox>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
</TreeView>


您可以使用属于同一组的
RadioButton
控件,这样一次只能选择一个选项

然后编辑控件模板以显示
复选框
控件来代替那些
单选按钮
,并将每个
复选框
IsChecked
属性绑定到其父
单选按钮
。现在,当您“选中”一个
复选框
时,所有其他
复选框
控件都将被取消选中

<TreeView Name="treeView_max" >
    <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" >
                            <RadioButton Name="chk" Margin="2" Tag="{Binding}" GroupName="SomeGroup">
                                <RadioButton.Template>
                                    <ControlTemplate>
                                        <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=RadioButton}}" />
                                    </ControlTemplate>
                                </RadioButton.Template>
                            </RadioButton>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
</TreeView>

注意你在哪里使用这个。当用户只能选择一个选项时,他们习惯于看到
单选按钮
,在
复选框
,他们可以选择多个选项

private void checkBox_Checked(object sender, RoutedEventArgs e)
{
    try
    {
        //uncheck all checkboxes  except selected one         
    }
    catch (Exception es)
    {
        MessageBox.Show(es.ToString());
    }
}
<TreeView Name="treeView_max" >
    <TreeView.Resources>
        <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" >
                            <RadioButton Name="chk" Margin="2" Tag="{Binding}" GroupName="SomeGroup">
                                <RadioButton.Template>
                                    <ControlTemplate>
                                        <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=RadioButton}}" />
                                    </ControlTemplate>
                                </RadioButton.Template>
                            </RadioButton>
                        </StackPanel>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </TreeView.Resources>
</TreeView>