【问题标题】:Silverlight Tab Control, FindName not always working properlySilverlight 选项卡控件,FindName 并不总是正常工作
【发布时间】:2011-08-27 22:34:33
【问题描述】:

我有一个 Silverlight 用户控件,它“绑定”到一个 Document 对象。文档类包含一个 Field 对象数组。目的是当控件绑定到文档时,文档中的每个字段都绑定到用​​户控件中的控件。每个字段都有一个名称,并且要绑定到该字段的用户控件中的控件具有相同的名称(因此,如果该字段称为“FirstName”,则用户控件中将有一个文本框 x:Name= “名”)。为了确定将哪个控件绑定到哪个字段,我使用了以下代码:

private void BindDocumentToUserControl(Document document)
{
    foreach (Field field in document.Fields)
    {
        Control c = this.FindName(field.Name);

        if (c != null)
        {
            //bind control to field...
        }
    }
}

这一切都很好,直到我尝试将控件放入选项卡控件中。当第一次加载用户控件时(并且用户自己没有更改选定的选项卡),上述方法会找到所有控件。但是,如果用户更改了选定的选项卡然后重新绑定控件,this.FindName 将只查找选定选项卡中的控件。如果我在另一个我知道是正确的选项卡中传递控件的名称,它仍然会返回 null。

我在下面找到了关于同一问题的文章,但是该解决方案并不适合我正在尝试做的事情。任何帮助将不胜感激

http://forums.silverlight.net/forums/p/59912/248977.aspx

【问题讨论】:

  • 我无法提出解决方案,但原因是未呈现非活动选项卡项并且 FindName 遍历可视化树,所以这就是它失败的原因。我真的不明白你想要实现什么,但对于运行时视图注入,我建议看看 PRISM:compositewpf.codeplex.com

标签: silverlight findname


【解决方案1】:

作为一个答案,你不能将每个选项卡的控件加载到隐藏面板,一次一个选项卡,然后在加载控件后将它们移回选项卡吗?

我不能说这绝对有效,但听起来“合乎逻辑”,如果有点肮脏的黑客......

【讨论】:

  • 我想出的解决方法与此几乎相同。我修改了上面调用 BindDocumentToUserControl 方法的代码。而不仅仅是在它循环遍历选项卡控件中的每个选项卡项并在调用该方法之前将其设置为活动选项卡时调用它。不是很好,因为这意味着每个面板的所有文档字段都被迭代,而不是一次,但它现在就可以了
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多