3

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

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

除了存在但未初始化的页面的“tbTest”字段之外,这有效。仔细检查后,InitializeComponent 方法确实尝试定位 TextBox(使用 FindName),但没有这样做(返回 null)。

经过一番调查,我发现名称范围是问题所在 - UserControl 有它自己的名称范围,因此无法使用页面的 FindName 找到它的子级,但可以使用 UserControl 的 FindName 方法。

如何更改我的 UserControl 以便可以通过 InitializeComponent 方法定位子控件?标准的面板(StackPanel、Grid等)这样做似乎没有任何问题,那么一定有解决方案吗?

谢谢

4

1 回答 1

1

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

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

于 2010-12-31T18:15:37.040 回答