2012-04-19 83 views
0

目前我得到與WPF資源交手,不知道如果你能幫助我:WPF ContentControl中的內容沒有得到家長資源

我有一個包含自己的資源WPF窗口。它還包含一個內容控件,它根據在樹視圖中選擇的內容來更改其內容,例如:

contentControl1.Content = someUserControl; 

這可以是一個UserControl,例如, SomeUserControl它使用我在窗口xaml中定義的靜態資源。

當在後面的窗口代碼中創建SomeUserControl的實例時,我得到一個XMLParseException('在'System.Windows.StaticResourceExtension'上提供值'拋出異常')。這是包含綁定到靜態資源的行。

爲了解決這個問題,我已將此添加SomeUserControl的構造(parentResources是從那裏someUserControl實例化窗口的資源):

public SomeUserControl(ResourceDictionary parentResources) 
{ 
    this.Resources.MergedDictionaries.Add(parentResources); 
    InitializeComponent(); 
} 

這是在這種特殊情況下尋找資源的最佳方法?謝謝你的幫助。

回答

1

我假設你有一個{StaticResource myResource}。您是否嘗試過使用{DynamicResource myResource}

http://msdn.microsoft.com/en-us/library/ms748942.aspx

編輯

好了,因爲你的資源是一個轉換器,它不能使用動態資源,那麼我認爲你在做什麼可能是一個很好的一個解決方案。

根本的問題是,在你的控制實例化的那一刻,它不是窗口的一部分,因此它不具有窗口資源的任何訪問。正如StaticResource中的靜態術語所暗示的,控制要求資源可用。所以你必須在控件實例化時使它可用。

你可能也想看看類似Prism的東西,它是Region的,這可能是更好的方式來處理你的「控制」(取決於你的需要)。

+0

您好,感謝您的建議:不,這不利於,而不是我得到:A「DynamicResourceExtension」不能在'轉換器「結合」類型的屬性設置。 'DynamicResourceExtension'只能在DependencyObject的DependencyProperty上設置。 - 我目前正在綁定轉換器我寫過 – Jeb 2012-04-19 13:25:53

1

這取決於你在說些什麼資源,其實。

因爲你這樣做的方式可能很好,只有缺點,你從聲明性編程,這是預期分離自己的WPF編碼方式。

您還可以添加一個StaticResource,例如在App.xaml中,所以它會被初始化一旦加載你的應用程序啓動,並在任何方式,窗口負荷。

希望這會有所幫助。

+0

感謝您的幫助。我對我寫的轉換器有約束力。不幸的是,我無法添加到App.xaml;我以winforms託管WPF表單。有解決方法(http://stackoverflow.com/questions/3799515/adding-a-static-resourcedictionary-to-usercontrols-before-the-xaml-is-parsed),但我使用頂級窗口的資源作爲應用程序.xaml等效,並且不顯示任何可能共享資源的其他wpf表單。 – Jeb 2012-04-19 13:30:48

+0

考慮到,類型的極端條件(在WinForms中託管)在你現在正在做的事情中沒有看到任何問題,所以。 – Tigran 2012-04-19 13:34:00