gpt4 book ai didi

c# - 与资源字典共享项目 (xaml)

转载 作者:太空狗 更新时间:2023-10-30 00:49:02 27 4
gpt4 key购买 nike

我正在寻找一种在项目之间共享 ResourceDictionary 的方法。

将新项目添加到共享项目不提供资源字典。它可以在其他(主)项目中创建并拖动。但是我无法将其构建选项更改为 Page:

enter image description here

思路就是这样加载资源字典

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

这显然是当前失败的

An exception of type 'System.IO.IOException' occurred in PresentationFramework.dll but was not handled in user code

Additional information: Cannot locate resource '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>

和/或手动加载,例如使用这个 pack Uri :

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

关于c# - 与资源字典共享项目 (xaml),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41139017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com