Почему DynamicResources в vsshell: VsBrushes не разрешены - PullRequest
0 голосов
/ 22 мая 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 - VS2012 Справочник по XAML ToolWindow VsBrushes

за исключением того, что этот вопрос относится к Visual Studio 2012. Я использую Visual Studio 2019, поэтому в это время могли произойти некоторые изменения.

Ответы на этот вопрос у меня не сработали.

Может кто-нибудь объяснить это поведение? Кажется странным, что автоматически сгенерированный код должен содержать эти предупреждения.

1 Ответ

1 голос
/ 22 мая 2019

Почему появляется предупреждение:

См. Разница между DynamicResource и 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-design?) Так что для меня я изменил два ресурса на SystemResource, к которым можно получить доступ в designer- время, когда предупреждения исчезли:

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