我有一个Silverlight UserControl,它使用ContentPropertyAttribute公开其中一个子面板的Children属性。这允许我将子控件添加到我的页面上的面板:
<local:MyUserControl>
<TextBox Name="tbTest" />
</local:MyUserControl>
除了页面的“tbTest”字段之外,这是有效的,但未初始化。仔细观察,InitializeComponent方法确实尝试找到TextBox(使用FindName),但未能这样做(返回null)。
经过一番调查后,我发现名称范围是问题 - UserControl有自己的名称范围,因此它的子项不能与页面的FindName一起定位,但可以使用UserControl的FindName方法。
如何更改UserControl,以便可以通过InitializeComponent方法找到子控件?标准面板(StackPanel,Grid等)似乎没有任何问题,所以必须有解决方案吗?
由于
答案 0 :(得分:1)
此时可能很难做到,但最好的做法可能是从ItemsControl而不是UserControl派生您的控件。那么你就不会遇到名称范围的问题。
我认为作为一种解决方法,您可以使用VisualTreeHelper深入控制该控件,以手动设置tbTest字段。