簡體   English   中英

包 URI 不適用於 generic.xaml 合並字典

[英]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 項目中使用了控件,但它拋出了一個XamlParseExceptionInnerException

找不到資源“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

編輯:我看過這個問題,但沒有解釋為什么

因為您使用來自另一個程序集的資源文件,並且必須指向程序集名稱。

正如 MSDN 所說:

編譯為引用程序集的資源文件的包 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.

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