簡體   English   中英

為什么Generic.xaml中的合並字典需要絕對的uri?

[英]Why are absolute uri's required for merged dictionaries in Generic.xaml?

考慮一個文件| WPF應用程序的新項目,包含:

  1. 一個名為CustomControl1的新自定義控件
  2. 兩個新的資源字典名為Dictionary1和Dictionary2

從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM