与资源字典共享项目 (xaml)
Shared project with resource dictionary (xaml)
我正在寻找一种在项目之间共享 ResourceDictionary
的方法。
向共享项目添加新项目不提供资源字典。它可以在其他(主)项目中创建并拖动。但是后来我无法将其构建选项更改为 Page:
想法是像这样加载资源字典
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'.
有什么想法吗?
这个问题是你输入了应用程序名称。您需要项目名称。下面是如何在 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);
可以手动编辑共享项目来设置资源字典的构建操作。
共享项目由 Project.shproj
和 Project.projitems
文件组成,打开第二个并在其中找到字典:
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)Dictionary.xaml" />
</ItemGroup>
之后添加
<ItemGroup>
<Page Include="$(MSBuildThisFileDirectory)Dictionary.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
对于包含字典的 WPF 项目,copy/paste 是正常 csproj
的东西。
似乎可以工作,尽管当项目加载到 Visual Studio 时此构建操作不可见。将文件添加到共享项目不会影响此手动更改。
现在我可以共享包含资源字典的项目了,耶!
资源字典可以合并到应用程序字典中,就像它位于项目的根目录中一样(在 xaml 设计器中用作 static/dynamic 资源):
<Application.Resources>
<ResourceDictionary >
<ResourceDictionary.MergedDictionaries>
<!-- doesn't really exists in project -->
<ResourceDictionary Source="Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
and/or 手动加载,例如使用这个 pack Uri :
var dictionary = new ResourceDictionary()
{
Source = new Uri("pack://application:,,,/FlexProperty.xaml"),
};
我遇到了同样的问题。在共享项目中包含 Xaml 的解决方案不需要直接编辑 .projitems 文件。
您只需将 Xamarin 添加到 Visual Studio 安装中。 (我使用 VS Community 2015 做到了。)
您现在可以通过常用的 Visual Studio 对话框添加 xaml 类型:
并且可以使用正确的构建操作:
Xaml 在共享项目中现在可以按预期编译和运行。
(大概这是为了支持 Xamarin Forms,但它适用于任何 xaml 文档。)
我正在寻找一种在项目之间共享 ResourceDictionary
的方法。
向共享项目添加新项目不提供资源字典。它可以在其他(主)项目中创建并拖动。但是后来我无法将其构建选项更改为 Page:
想法是像这样加载资源字典
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'.
有什么想法吗?
这个问题是你输入了应用程序名称。您需要项目名称。下面是如何在 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);
可以手动编辑共享项目来设置资源字典的构建操作。
共享项目由 Project.shproj
和 Project.projitems
文件组成,打开第二个并在其中找到字典:
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)Dictionary.xaml" />
</ItemGroup>
之后添加
<ItemGroup>
<Page Include="$(MSBuildThisFileDirectory)Dictionary.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
对于包含字典的 WPF 项目,copy/paste 是正常 csproj
的东西。
似乎可以工作,尽管当项目加载到 Visual Studio 时此构建操作不可见。将文件添加到共享项目不会影响此手动更改。
现在我可以共享包含资源字典的项目了,耶!
资源字典可以合并到应用程序字典中,就像它位于项目的根目录中一样(在 xaml 设计器中用作 static/dynamic 资源):
<Application.Resources>
<ResourceDictionary >
<ResourceDictionary.MergedDictionaries>
<!-- doesn't really exists in project -->
<ResourceDictionary Source="Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
and/or 手动加载,例如使用这个 pack Uri :
var dictionary = new ResourceDictionary()
{
Source = new Uri("pack://application:,,,/FlexProperty.xaml"),
};
我遇到了同样的问题。在共享项目中包含 Xaml 的解决方案不需要直接编辑 .projitems 文件。
您只需将 Xamarin 添加到 Visual Studio 安装中。 (我使用 VS Community 2015 做到了。)
您现在可以通过常用的 Visual Studio 对话框添加 xaml 类型:
并且可以使用正确的构建操作:
Xaml 在共享项目中现在可以按预期编译和运行。
(大概这是为了支持 Xamarin Forms,但它适用于任何 xaml 文档。)