XAML Intellisense不适用于参考装配资源

时间:2018-04-11 15:32:37

标签: wpf xaml intellisense resourcedictionary

我正在尝试创建一个包含核心样式,资源,控件等的项目DLL文件。然后,这将被引用到各种其他项目中,以用作图形基础来统一外观。

无论如何,我已经设置了图形项目,我可以在其他项目中使用它,它们似乎都正确显示。但是,我的静态资源的XAML智能感知似乎无法正常工作。

这是我的资源字典参考:

<ResourceDictionary Source="pack://application:,,,/BIT.GraphicElements;component/BITCoreStyles.xaml" />

正如您所看到的,我使用包装符号在其内部装配中引用它。我可以像我期望的样式设置元素(StButtonAction在上面的字典中):

Style="{StaticResource StButtonAction}"

但是,我必须手动输入。 Intellisense不会将其作为选项提供,但如果我手动输入它会成功应用它。如果我将项目添加到解决方案并在那里引用它也可以工作,但是那些不一定能够访问图形项目的人可以使用它,因此这不是一个很好的解决方案。长期......

我错过了什么?有没有办法让Intellisense为这些工作?

1 个答案:

答案 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找到它们。

我之前提到过这一点但是......根据我的经验,这种对资源的智能感知通常是不可靠的。

这肯定解决了我在此解决方案中遇到的类似问题。当您想要暂时覆盖资源词典以进行本地化/品牌测试时,它也很有用。