5

プロジェクト間で共有する方法を探していResourceDictionaryます。

共有プロジェクトに新しいアイテムを追加しても、リソース ディクショナリは提供されません。他の(メイン)プロジェクトで作成してドラッグできます。しかし、そのビルド オプションをPageに変更することはできません。

ここに画像の説明を入力

アイデアは、このようにリソース辞書をロードすることです

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

これは明らかに現在失敗しています

タイプ 'System.IO.IOException' の例外が PresentationFramework.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: リソース 'dictionary2.xaml' が見つかりません。

何か案は?

4

3 に答える 3

4

共有プロジェクトを手動で編集して、リソース ディクショナリのビルド アクションを設定することができます。

共有プロジェクトはProject.shprojProject.projitemsファイルで構成され、2 番目に開き、そこに辞書を見つけます。

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

その後に追加

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

csproj辞書を含むWPFプロジェクトの通常のコピー/貼り付けです。

プロジェクトが 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"),
};
于 2017-01-03T09:50:55.047 に答える