Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight选项卡控件,FindName不总是正常工作_Silverlight_Findname - Fatal编程技术网

Silverlight选项卡控件,FindName不总是正常工作

Silverlight选项卡控件,FindName不总是正常工作,silverlight,findname,Silverlight,Findname,我有一个silverlight用户控件,它“绑定”到一个文档对象。文档类包含字段对象数组。其目的是,当控件绑定到文档时,文档中的每个字段都绑定到用户控件中的一个控件。每个字段都有一个名称,并且用户控件中要绑定到该字段的控件具有相同的名称(因此,如果该字段名为“FirstName”,则用户控件中将有一个文本框,其中包含x:name=“FirstName”)。为了确定哪个控件要绑定到哪个字段,我使用了以下代码: private void BindDocumentToUserControl(Docum

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

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

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


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


我不能说这确实有效,但听起来“合乎逻辑”,如果有一点肮脏的攻击….

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


我不能说这确实有效,但听起来“合乎逻辑”,如果有点肮脏的黑客行为……

我不能建议解决方案,但原因是不活动的选项卡项不会呈现,FindName会遍历视觉树,所以它失败了。我不太明白您想要实现什么,但对于运行时视图注入,我建议您看看PRISM:我不能建议解决方案,但原因是不活动的选项卡项不会呈现,FindName会遍历可视化树,所以它失败了。我真的不明白您想要实现什么,但对于运行时视图注入,我建议看一看PRISM:我提出的解决方法与此基本相同。我修改了上面调用BindDocumentToUserControl方法的代码。而不仅仅是在循环通过选项卡控件中的每个选项卡项并在调用方法之前将其设置为活动选项卡时调用它。不是很好,因为这意味着每个面板的所有文档字段都要迭代,而不是一次,但现在就可以了。我提出的解决方法与此基本相同。我修改了上面调用BindDocumentToUserControl方法的代码。而不仅仅是在循环通过选项卡控件中的每个选项卡项并在调用方法之前将其设置为活动选项卡时调用它。不是很好,因为这意味着每个面板的所有文档字段都要迭代,而不是一次,但现在就可以了