我有一个名为YesNoSelection的WPF UserControl,包含一个Label和两个名为rbnYes和rbNo的单选按钮。我想自动将RadioButton GroupName属性设置为控件的名称,所以我使用了:
public YesNoSelection()
{
InitializeComponent();
rbnYes.GroupName = this.Name;
rbnNo.GroupName = this.Name;
}
控件在设计器中添加如下:
<local:YesNoSelection x:Name="selOnTop" Label="Always on top" Margin="2,2,2,2" Grid.Row="0"/>
然而,它不起作用。经过一些调试,我发现
this.Name
始终返回空。在设计器中,它不允许我设置常规的Name属性,只有x:Name,因为类是在本地定义的(我认为是?(。
我在WinForms中做了很多工作,但对WPF还是个新手。有什么办法做到这一点吗?或者可以用另一种方法来实现UserControl将唯一的GroupName分配给RadioButtons而不设置任何其他属性?我知道我可以手动设置它们,或者创建另一个属性并使用它,但我想知道这是否可能。
总之,我的目标是拥有一个带有两个单选按钮的UserControl,它会自动将其GroupName分配给其父级YesNoSelection Name。
好的,所以根据Clemens的建议,我尝试重写OnInitialized和使用Loaded事件。重写OnInitialized产生了相同的结果,但Loaded事件完成了任务。因此,在这种情况下,正确的代码是
public YesNoSelection()
{
InitializeComponent();
this.Loaded += YesNoSelection_Loaded;
}
private void YesNoSelection_Loaded(object sender, RoutedEventArgs e)
{
rbnYes.GroupName = this.Name;
rbnNo.GroupName = this.Name;
}
非常感谢克莱门斯的解决方案!