访问WPF中的UserControl Name属性



我有一个名为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;
}

非常感谢克莱门斯的解决方案!

最新更新