我正在使用WPF选项卡控件来呈现用户控件的单独重复实例。即Item1设置的Tab1,Item2设置的Tab2等。
选项卡之间似乎正在共享单选按钮组名称。发生了什么事?
简单示例:
一个窗口包含标签。每个选项卡都包含一个用户控件。
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:lib="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Grid>
<TabControl Margin="0,0,0,100" Name="tabControl1">
<TabItem Header="tabItem1" Name="tabItem1">
<lib:UserControl1 x:Name="userControlInTab1" />
</TabItem>
<TabItem Header="tabItem2" Name="tabItem2">
<lib:UserControl1 x:Name="userControlInTab2" />
</TabItem>
</TabControl>
</Grid>
用户控件只是一组中的两个单选按钮:
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="50" Width="100">
<StackPanel>
<RadioButton GroupName="Group1" Name="radiobutton1" Content="option1" IsChecked="True" />
<RadioButton GroupName="Group1" Name="radiobutton2" Content="option2" />
</StackPanel>
如果您运行此应用程序,您将看到只检查第二个选项卡中的radiobutton1,尽管用户控件将其定义为始终在启动时进行检查。
此外,在后面的代码中设置一个单选按钮,似乎取消选中其他标签中的所有单选按钮!
似乎在鼠标控制下事情表现良好(即标签是独立的)。
最后,用户控件似乎确实是单独的实例化。例如,我已尝试使用用户控件上的滑块,并且它们在标签之间的行为是独立的。他们应该这样做。
感谢任何人对此的帮助。我广泛搜索无济于事。当然,我不是唯一一个遇到过这个问题的人。我正在使用VS2008。
答案 0 :(得分:16)
没有GroupName设置就可以了。由于一个容器中的RadioButtons无论如何都是自动分组的,因此不是必需的。例如:
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="50" Width="100">
<StackPanel>
<StackPanel>
<RadioButton Name="radiobutton1" Content="option1" IsChecked="True" />
<RadioButton Name="radiobutton2" Content="option2" />
</StackPanel>
<StackPanel>
<RadioButton Name="radiobutton3" Content="option3" IsChecked="True" />
<RadioButton Name="radiobutton4" Content="option4" />
</StackPanel>
</StackPanel>
</UserControl>
答案 1 :(得分:5)
此行为是设计使然:
GroupName的重点是允许您定义单选按钮 作为一个群体而不必由同一父母包含 面板。
请阅读this article了解详细说明。
简单地说,对于两种不同的情况有两种解决方案:
如果您在一个容器中包含所有逻辑相关的单选按钮,则不指定 GroupName 。在这种情况下,单选按钮将自动形成一个独立于任何其他单选按钮组的组。
如果您在多个面板上拆分逻辑相关的单选按钮以进行布局,请read the article详细说明该怎么做。
答案 2 :(得分:0)
我遇到的情况是设计不允许将无线电分离成单独的堆栈。所以,我所做的是从xaml中删除GroupName
并从模型中强制执行分组。这个想法来自this link,例如
private bool _useGaugeOpen;
public bool UseGaugeOpen
{
get { return _useGaugeOpen; }
set
{
_useGaugeOpen = value;
_useATGOpen = !value;
RaisePropertyChanged("UseATGOpen");
}
}
private bool _useATGOpen;
public bool UseATGOpen
{
get { return _useATGOpen; }
set
{
_useATGOpen = value;
_useGaugeOpen = !value;
RaisePropertyChanged("UseGaugeOpen");
}
}