我有一个Silverlight UserControl,它使用ContentPropertyAttribute公开其子面板之一的Children属性。这使我可以将子控件添加到页面上的面板中:
<local:MyUserControl>
<TextBox Name="tbTest" />
</local:MyUserControl>
除了当前页面的“tbTest”字段未初始化外,此方法均有效。在仔细检查时,InitializeComponent方法确实尝试查找文本框(带有FindName),但没有这样做(返回null)。
经过一番调查,我发现名称范围是问题所在-UserControl具有它自己的名称范围,因此不能通过页面的FindName来定位子控件,而可以使用UserControl的FindName方法来定位子控件。
如何更改UserControl以便子控件可以通过InitializeComponent方法定位?标准面板(StackPanel,网格等)似乎没有任何问题,因此必须有解决方案吗?
谢谢
最佳答案
在这一点上可能很难做到,但是最好的做法可能是从ItemsControl而不是UserControl派生您的控件。这样一来,名称范围就不会出现问题。
我想作为一种解决方法,您可以使用VisualTreeHelper深入研究控件以手动设置tbTest字段。
关于silverlight - UserControl子控件和FindName,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4571577/