UserControl子控件和FindName

时间:2010-12-31 18:02:42

标签: silverlight user-controls panel findname

我有一个Silverlight UserControl,它使用ContentPropertyAttribute公开其中一个子面板的Children属性。这允许我将子控件添加到我的页面上的面板:

<local:MyUserControl>
    <TextBox Name="tbTest" />
</local:MyUserControl>

除了页面的“tbTest”字段之外,这是有效的,但未初始化。仔细观察,InitializeComponent方法确实尝试找到TextBox(使用FindName),但未能这样做(返回null)。

经过一番调查后,我发现名称范围是问题 - UserControl有自己的名称范围,因此它的子项不能与页面的FindName一起定位,但可以使用UserControl的FindName方法。

如何更改UserControl,以便可以通过InitializeComponent方法找到子控件?标准面板(StackPanel,Grid等)似乎没有任何问题,所以必须有解决方案吗?

由于

1 个答案:

答案 0 :(得分:1)

此时可能很难做到,但最好的做法可能是从ItemsControl而不是UserControl派生您的控件。那么你就不会遇到名称范围的问题。

我认为作为一种解决方法,您可以使用VisualTreeHelper深入控制该控件,以手动设置tbTest字段。