[英]Pack URI not working for generic.xaml merged dictionaries
我制作了一個自定義控件庫,並在根路徑中制作了一個名為“FlipView”的控件。 然后我刪除了Generic.xaml
的樣式,並將其移動到根路徑中名為FlipView.xaml
自己的資源字典中。 現在我使用以下代碼將該資源字典合並到Generic.xaml
:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/FlipView.xaml" />
</ResourceDictionary.MergedDictionaries>
然后我在另一個 wpf 項目中使用了控件,但它拋出了一個XamlParseException
和InnerException
說
找不到資源“flipview.xaml”。
為什么不能? 資源字典位於控件庫項目的根路徑中。
如果我將Source
屬性設置器替換為"pack://application:,,,/MyCustomControls;component/FlipView.xaml"
( MyCustomControls
是我的自定義控件庫的名稱),它可以正常工作。
通用.xaml:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MyCustomControls;component/FlipView.xaml" />
</ResourceDictionary.MergedDictionaries>
為什么會這樣?
對於 WPF 項目,這似乎是多余的,因為pack://application,,,/
指的是根路徑,而WpfAssemblyName;component/
再次指的是根路徑。 為什么需要Generic.xaml
?
編輯:我看過這個問題,但沒有解釋為什么。
因為您使用來自另一個程序集的資源文件,並且必須指向程序集名稱。
編譯為引用程序集的資源文件的包 URI 使用以下權限和路徑:
權限:應用程序://。
Path :編譯為引用程序集的資源文件的名稱。 路徑必須符合以下格式:
AssemblyShortName[;Version][;PublicKey];component/Path
- AssemblyShortName :引用程序集的短名稱。
- ;Version [可選]:包含資源文件的引用程序集的版本。 當加載了兩個或多個具有相同短名稱的引用程序集時使用。
- ;PublicKey [可選]:用於對引用的程序集進行簽名的公鑰。 當加載了兩個或多個具有相同短名稱的引用程序集時使用。
- ;component : 指定被引用的程序集是從本地程序集引用的。
- /Path :資源文件的名稱,包括其路徑,相對於引用程序集的項目文件夾的根目錄。
以下示例顯示位於引用程序集項目文件夾根目錄中的 XAML 資源文件的包 URI。
pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
更新:
為避免在同一程序集中聲明樣式的地址中出現冗余詞,可以在不指出庫的情況下聲明樣式文件:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="FlipView.xaml" />
</ResourceDictionary.MergedDictionaries>
克萊門斯的回答:
看看這里的第三張圖。 應用程序中的 Pack URI 與應用程序程序集相關,即使它們在庫中使用。 您的資源位於引用的程序集中,因此您必須指定其名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.