簡體   English   中英

與資源字典共享項目(xaml)

[英]Shared project with resource dictionary (xaml)

我正在尋找一種在項目之間共享ResourceDictionary的方法。

向共享項目添加新項目不提供資源字典。 它可以在其他(主)項目中創建並拖動。 但后來我無法將其構建選項更改為Page

在此輸入圖像描述

想法是加載這樣的資源字典

var dictionary = new ResourceDictionary();
dictionary.Source = new Uri("/WpfApplication91;component/Dictionary2.xaml", UriKind.Relative);

目前顯然失敗了

PresentationFramework.dll中出現“System.IO.IOException”類型的異常,但未在用戶代碼中處理

附加信息:找不到資源'dictionary2.xaml'。

有任何想法嗎?

可以手動編輯共享項目以設置資源字典的構建操作。

共享項目包含Project.shprojProject.projitems文件,打開第二個並在那里找到字典:

<ItemGroup>
  <None Include="$(MSBuildThisFileDirectory)Dictionary.xaml" />
</ItemGroup>

之后添加

<ItemGroup>
  <Page Include="$(MSBuildThisFileDirectory)Dictionary.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
  </Page>
</ItemGroup>

對於包含字典的WPF項目,它是來自普通csproj的復制/粘貼內容。

似乎工作,但是當項目加載到Visual Studio時,此構建操作不可見。 將文件添加到共享項目不會影響此手動更改。

現在我可以擁有包含資源字典的共享項目,耶!

資源字典可以合並到應用程序字典中,如果它位於項目的根目錄中(在xaml設計器中用作靜態/動態資源):

<Application.Resources>
    <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries>
            <!-- doesn't really exists in project -->
            <ResourceDictionary Source="Dictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

和/或手動加載,例如使用此包Uri

var dictionary = new ResourceDictionary()
{
     Source = new Uri("pack://application:,,,/FlexProperty.xaml"),
};

我遇到了同樣的問題。 有一個解決方案可以將Xaml包含在共享項目中,而不需要直接編輯.projitems文件。

您只需將Xamarin添加到Visual Studio安裝中即可。 (我是在VS社區2015中做到的。)

您現在可以通過常用的Visual Studio對話框添加xaml類型: 添加資源字典

並且可以使用正確的構建操作: 建立行動

共享項目中的Xaml現在可以按預期編譯和運行。

(據推測,這是支持Xamarin Forms ,但它適用於任何xaml文檔。)

此問題是您正在放置應用程序名稱。 您需要項目名稱。 下面是如何在XAML和代碼中執行此操作

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/SharedProject1;Component/Dictionary2.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

要么

var dictionary = new ResourceDictionary();
dictionary.Source = new Uri("/SharedProject1;component/Dictionary2.xaml", UriKind.Relative);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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