C# 处理wpf中复选框上的检查事件
我有一个包含名称和两个复选框(名称、男性(复选框)、女性(复选框))的列表视图。我希望确保一次只从listview中选择一个复选框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
<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>