[英]Why are absolute uri's required for merged dictionaries in Generic.xaml?
考慮一個文件| WPF應用程序的新項目,包含:
從Generic.xaml中取出生成的樣式並將其移動到Dictionary2。 然后將Dictionary2合並為Dictionary1,將Dictionary1合並為Generic,如下所示:
<!--Generic.xaml-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Themes/Dictionary1.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!--Dictionary1.xaml-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary2.xaml"/>
</ResourceDictionary.MergedDictionaries>
然后,將CustomControl1的實例添加到MainWindow的網格中。 (這部分是重現問題所必需的。項目總是很好編譯 - 只有在運行時才能顯示問題,並且必須引用字典。)
在Dictionary1.xaml中,我在同一個文件夾中的另一個dict中合並,因此一個簡單的Source =“Dictionary2.xaml”可以工作。 但在Generic.xaml中,我必須使用絕對URI。 如果我在沒有pack://應用程序的東西的情況下將上面的內容更改為Source =“Dictionary1.xaml”,那么我會在嘗試構造MainWindow時遇到由IOException引起的XamlParseException“無法找到資源'dictionary1.xaml'”。
我的問題: 關於相對URI解析的generic.xaml有什么特別之處,為什么?
對不起,因為我沒有能力寫評論,所以我發布這個作為答案。
我有同樣的情況,一切都適合我。 我不需要在Generic.xaml的路徑中放入“pack:// application”。 但只有當程序集的輸出類型是“Windows應用程序”時。 對於“類庫”,我需要在路徑中添加程序集名稱( Source="/ClassLibarayAssemblyName;component/Themes/Dictionary1.xaml"
),因為沒有它,WPF引擎會嘗試在應用程序的主程序集中查找Dictionary1.xaml。
兩種情況下的目標框架是“.NET Framework 4 Client Profile”
只是猜測:generic.xaml也需要可以從外部程序集訪問,因此這是一種確保可以使用絕對URI從任何地方找到資源的方法。 正如我所說,這只是在黑暗中刺傷,不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.