在项目中使用SDK格式时,在设计时加载资源字典

时间:2019-12-19 13:11:12

标签: c# .net wpf .net-core

我目前正在将我的项目转换为Visual Studio的新SDK格式。不幸的是我无法让设计师工作。过去,我在每个项目中添加了一个app.xaml,其中包含与设计时间相关的所有资源。这会导致一些警告,但是visual studio给了我我所需要的:XAML设计器中的语法完成

切换到SDK格式后,出现错误:\Microsoft.WinFX.targets(225,9): error MC1002: Library project file cannot specify ApplicationDefinition element. 因此,我删除了app.xaml文件,但是现在我没有语法完成功能,并且设计器不再显示我的控件。

我尝试过的是添加资源文件并设置

<Page Include="Properties\DesignTimeResources.xaml">
    <SubType>Designer</SubType>
    <Generator>MSBuild:Compile</Generator>
    <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>
csproj文件中的

。但是,此技巧不再起作用,因为无法再在csproj文件中定义页面。

Microsoft认为这应该如何工作?是否可以在不编辑我的1000个xaml文件中的每个文件的情况下,将设计时间资源添加到我的项目中?

我真的想避免将此添加到每个xaml文件中:

 <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/MyAssembly;component/Resources/ResourceBundle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>

1 个答案:

答案 0 :(得分:0)

这可以解决问题:

 <ItemGroup>
    <Page Update="Properties\DesignTimeResources.xaml" Condition="'$(DesignTime)'=='true' OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)') AND '$(BuildingInsideVisualStudio)'!='true' AND '$(BuildingInsideExpressionBlend)'!='true')">
      <SubType>Designer</SubType>
      <Generator>MSBuild:Compile</Generator>
      <ContainsDesignTimeResources>true</ContainsDesignTimeResources>
    </Page>
  </ItemGroup>

将其添加到项目文件中,并且我的用户控件在设计时再次加载。.不幸的是,Intellisense仍然无法正常工作。.