为什么无法解析vsshell:VsBrushes中的DynamicResources

时间:2019-05-21 22:21:39

标签: visual-studio visual-studio-extensions visual-studio-2019

我用工具窗口制作了一个新的Visual Studio扩展,如Microsoft在此处https://docs.microsoft.com/en-us/visualstudio/extensibility/creating-an-extension-with-a-tool-window?view=vs-2019

所述。

我没有对Visual Studio生成的代码进行任何更改,但是我收到两个警告:

The resource "{x:Static vsshell:VsBrushes.WindowKey}" could not be resolved.    
The resource "{x:Static vsshell:VsBrushes.WindowTextKey}" could not be resolved.    

由于以下屏幕截图中显示的两行。

enter image description here

这里的问题非常相似

VS2010 to VS2012 ToolWindow XAML Reference VsBrushes

除了该问题引用了Visual Studio2012。我正在使用Visual Studio 2019,因此在此期间可能有所更改。

该问题的答案对我不起作用。

有人可以解释这种行为吗?自动生成的代码应该包含这些警告似乎很奇怪。

1 个答案:

答案 0 :(得分:1)

  
    

为什么会发生警告:

  

请参见Difference between DynamicResource and StaticResource。“工具窗口”项使用DynamicResources,因此可以在运行时设置和更改资源。

WindowsKey和WindowsTextKey来自VsBrushes class,这两种颜色资源不能在设计时访问,而是可以在运行时访问。这就是为什么在安装.vsix而vs显示两个警告之后,“工具窗口”控件可以很好地工作的原因。

此外:

如果我们将DynamicResource更改为StaticResource,则警告将变为错误。模板中的默认值vsshell:VsBrushes.WindowKey仅可在运行时访问,因此开发人员团队默认设置了DynamicResource。

我认为这是设计使然,实际上警告可以看作是一条消息:Possible notFoundResource, please take care!因此我们可以忽略它。

  

要删除警告:

正如我所说,这只是一条消息,告诉我们资源可能无法解析,因为设计者无法在“设计时”访问资源vsshell:VsBrushes.WindowKey。为什么不将颜色设置为在设计控件时可以访问的系统颜色。

实际上,我们正在开发Window COntrol,当然我们可以更改控件的颜色以使其更好。(UI设计?)因此,对我来说,我将这两个资源更改为SystemResource,可以在设计器中进行访问-时间到了,警告消失了:

Background="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"
Foreground="{DynamicResource {x:Static SystemColors.MenuBarBrushKey}}"