我有一個silverlight用戶控件,它被綁定到一個Document對象。文檔類包含一個Field對象數組。目的是當控件綁定到文檔時,文檔中的每個字段都綁定到用戶控件中的控件。每個字段都有一個名稱,並且用戶控件中要綁定到該字段的控件被賦予相同的名稱(所以如果字段被稱爲「FirstName」,用戶控件中將出現一個文本框,其中x:Name = 「名字」)。爲了確定哪些控制是綁定到我用下面的代碼字段:Silverlight Tab Control,FindName不總是正常工作
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:http://compositewpf.codeplex.com/ – dain 2011-05-18 10:48:41