C# 处理wpf中复选框上的检查事件

C# 处理wpf中复选框上的检查事件,c#,wpf,listview,checkbox,wpf-controls,C#,Wpf,Listview,Checkbox,Wpf Controls,我有一个包含名称和两个复选框(名称、男性(复选框)、女性(复选框))的列表视图。我希望确保一次只从listview中选择一个复选框 <UserControl.Resources> <DataTemplate x:Key="datatemp"> <StackPanel Orientation="Horizontal" Width="200" > <TextBlock Text="{Binding VmNa

我有一个包含名称和两个复选框(名称、男性(复选框)、女性(复选框))的列表视图。我希望确保一次只从listview中选择一个复选框

   <UserControl.Resources>
   <DataTemplate x:Key="datatemp">
        <StackPanel Orientation="Horizontal" Width="200" >
            <TextBlock Text="{Binding VmName}" Width="129" Visibility="Visible" />
            <CheckBox  Name="cb"  IsThreeState="False" Checked="off_chek_select"  IsChecked="{Binding IsCheck, Mode=TwoWay}"  Margin="6,0,18,6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
            <CheckBox  Name="cb1" IsThreeState="False" Checked="ins_chek_select" IsChecked="{Binding IsCheck1, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>


在这里,我在listview中使用了这个数据模板。我无法从datatemplate访问控件以写入检查事件。

标记
属性中,您可以放置对父元素的引用(在您的情况下是
堆栈面板
),在代码隐藏中,您可以使用
FindName
方法查找元素

XAML:

如果您有多个选项,并且在使用RadioButton()时只应选择一个选项



实际上,这是我正在尝试做的一个例子。我不想用单选按钮。还有什么可以做的吗Chekboxes@AbhishekNehe再次检查我的答案:)我无法在单击第一个复选框的事件时访问第二个复选框。我想实现与RadioBox相同的功能,但要使用复选框。@AbhishekNehe再次检查我的答案:)
<DataTemplate x:Key="datatemp">
    <StackPanel x:Name="stackPanel" Orientation="Horizontal" Width="200" >
        <TextBlock Text="{Binding VmName}" Width="129" Visibility="Visible" />
        <CheckBox  Name="cb" Tag="{Binding ElementName=stackPanel}"  IsThreeState="False" Checked="off_chek_select"  IsChecked="{Binding IsCheck, Mode=TwoWay}"  Margin="6,0,18,6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
        <CheckBox  Name="cb1" Tag="{Binding ElementName=stackPanel}" IsThreeState="False" Checked="ins_chek_select" IsChecked="{Binding IsCheck1, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />
    </StackPanel>
</DataTemplate>
private void off_chek_select(object sender, RoutedEventArgs e)
{
    var cbSender = sender as CheckBox;
    if (cbSender != null)
    {
        var stackPanel = cbSender.Tag as StackPanel;
        if (stackPanel != null)
        {
            var cb1 = stackPanel.FindName("cb1") as CheckBox;
            if (cb1 != null)
            {
                cb1.IsChecked = !cbSender.IsChecked;
            }
        }
    }
}

private void ins_chek_select(object sender, RoutedEventArgs e)
{
    var cbSender = sender as CheckBox;
    if (cbSender != null)
    {
        var stackPanel = cbSender.Tag as StackPanel;
        if (stackPanel != null)
        {
            var cb = stackPanel.FindName("cb") as CheckBox;
            if (cb != null)
            {
                cb.IsChecked = !cbSender.IsChecked;
            }
        }
    }
}
<UserControl.Resources>
    <DataTemplate x:Key="datatemp">
        <StackPanel Orientation="Horizontal" Width="200" >
            <TextBlock Text="{Binding VmName}" Width="129" Visibility="Visible" />
            <RadioButton  Name="cb"  IsThreeState="False" IsChecked="{Binding IsCheck, Mode=TwoWay}"  Margin="6,0,18,6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
            <RadioButton  Name="cb1" IsThreeState="False" IsChecked="{Binding IsCheck1, Mode=TwoWay}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  />
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>