我正在尝试创建一个包含核心样式,资源,控件等的项目DLL文件。然后,这将被引用到各种其他项目中,以用作图形基础来统一外观。
无论如何,我已经设置了图形项目,我可以在其他项目中使用它,它们似乎都正确显示。但是,我的静态资源的XAML智能感知似乎无法正常工作。
这是我的资源字典参考:
<ResourceDictionary Source="pack://application:,,,/BIT.GraphicElements;component/BITCoreStyles.xaml" />
正如您所看到的,我使用包装符号在其内部装配中引用它。我可以像我期望的样式设置元素(StButtonAction在上面的字典中):
Style="{StaticResource StButtonAction}"
但是,我必须手动输入。 Intellisense不会将其作为选项提供,但如果我手动输入它会成功应用它。如果我将项目添加到解决方案并在那里引用它也可以工作,但是那些不一定能够访问图形项目的人可以使用它,因此这不是一个很好的解决方案。长期......
我错过了什么?有没有办法让Intellisense为这些工作?
答案 0 :(得分:1)
即使它没有解决您的具体问题,也许这会帮助未来的搜索者。 如果您有一个涉及外部dll的解决方案,那么您偶尔可以找到在设计时没有加载的资源。完全没有。即使你在app.xaml中合并,在你运行之前,事情也不会出现 对我来说,它看起来像是一种微妙的错误。
我解决这个问题的方法是使用最初用于Blend的功能。我们现在在visual studio中使用混合设计器。
在解决方案资源管理器中,将资源字典添加到“属性”。是。属性。首先在项目中创建它并将其拖到那里。这必须称为DesignTimeResources。然后,这可以合并您想要仅用于设计时间的任何资源字典,或者当您遇到问题时,您会认为资源字典在设计时没有加载。 我在军队编辑器中,但使用来自引用的dll,UILIb的资源。它看起来像:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ArmyEditor">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/UILib;component/Resources/UILibResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
这是一个奇怪的地方的资源字典,但到目前为止没有什么特别奇怪。
接下来是许多开发人员永远不会做的事情 - 编辑你的csproj。
右键单击您的项目并选择卸载 再次右键单击并编辑它。
在那里,您将拥有构成项目的所有内容的条目。当然,打破这个会很糟糕,所以也许你想先备份。
如果您不使用blend,那么我认为重要的是添加一个节点,其中包含ContainsDesignTimeResources True,但这里是我的:
<Page Include="Properties\DesignTimeResources.xaml" Condition="'$(DesignTime)'=='true' OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)') AND '$(BuildingInsideVisualStudio)'!='true' AND '$(BuildingInsideExpressionBlend)'!='true')">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
<ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>
保存您的修改。
重新加载您的项目。
当设计器处于打开状态时,您应该会发现其中的资源已加载。也许这会帮助intellisense找到它们。
我之前提到过这一点但是......根据我的经验,这种对资源的智能感知通常是不可靠的。
这肯定解决了我在此解决方案中遇到的类似问题。当您想要暂时覆盖资源词典以进行本地化/品牌测试时,它也很有用。