如果在代码中添加了元素,则“FindName”不起作用

时间:2012-04-21 15:05:22

标签: c# wpf xaml visual-tree

在WPF应用程序中,如果在XAML中声明了ContentControl,

<Grid Name="MyGrid">
    <ContentControl Name="MyContentControl" />
</Grid>

然后我可以使用FindName轻松地在代码中引用它:

ContentControl cc = FindName("MyContentControl") as ContentControl;
cc.Content = ...

但是如果我在代码中添加ContentControl:

 ContentControl contentcntr = new ContentControl();
 contentcntr.Name = "MyContentControl";
 this.MyGrid.Children.Add(contentcntr);

FindName找不到它。

第二种情况有什么问题?有什么区别?

1 个答案:

答案 0 :(得分:8)

XAML解析器会自动在名称范围内注册名称,如果您创建这样的元素,则可能需要使用RegisterName自行完成。 (还有一个accessor on FrameworkElement。)