2017-12-01 3 views
0

나는 사용자가 선택한 모든 종류의 테마 (명암, 명암 및 파랑)에 반응하여 확장을 시도하는 VSIX 프로젝트에서 작업 중입니다. 컨트롤과 텍스트는 특정 테마에서 읽을 수 없게됩니다. UserControl.Resources의 Resource Dictionary에서 ThemeDictionaries를 사용했지만 내 컨트롤이 선택한 테마에 맞지 않습니다.주제 변경에 대한 Vsix 적응성

<UserControl.Resources> 
<ResourceDictionary> 
    <ResourceDictionary.ThemeDictionaries> 
       <ResourceDictionary x:Key="Light"> 
        <SolidColorBrush x:Key="myBrush" Color="{StaticResource SystemBaseHighColor}"/> 
       </ResourceDictionary> 
       <ResourceDictionary x:Key="Dark"> 
        <SolidColorBrush x:Key="myBrush" Color="{StaticResource SystemBaseHighColor}"/> 
       </ResourceDictionary> 
       <ResourceDictionary x:Key="HighContrast"> 
        <SolidColorBrush x:Key="myBrush" Color="{ThemeResource SystemColorButtonFaceColor}"/> 
       </ResourceDictionary> 
      </ResourceDictionary.ThemeDictionaries> 
     </ResourceDictionary> 
</UserControl.Resources> 
+0

https://stackoverflow.com을 참조하십시오./questions/18913208/colors-in-visual-studio-extension / –

답변

0

테마 Visual Studio를 확장하는 가장 좋은 방법은 자신의 세트를 만들 중 하나 VSIX Color Editor를 사용하는 것입니다 : 사람이 다음은 VSIX 프로젝트에 ThemeDictionaries을 사용하는 올바른 방법이 무엇인지 말해 줄 수있는 것은 내가 노력 코드입니다 각 상자 내 VS 테마에 대한 색상 키를 사용하거나 기존 VS 색상 키를 선택하여 내선에서 사용할 수 있도록 내보낼 수 있습니다. 당신이 당신의 테마 설계하면

, 당신은 파일> 테마의 resoures를 포함하는 PKGDEF 파일, 각각, 이러한 리소스를 액세스하기위한 코드 파일을 생성, PKGDEF 파일 및 Generate Code for Accessing the Colors으로 저장 할 수 있습니다.

그런 다음 두 파일을 모두 Visual Studio VSIX Project에 추가하십시오. 코드 파일을 C# 소스로 추가하고 PKGDEF의 Build Action Property to 'Content'을 변경하여 VSIX와 함께 설치하도록 PKGDEF 파일을 설정합니다.

그런 다음 XAML에 다음과 유사한 XAML로 결합함으로써 이러한 컬러 키를 소비 할 수 있습니다 :

uicolors 루트 XAML 요소에 선언 생성 된 C# 클래스를 포함하는 C#을 네임 스페이스를,이다
<Setter Property="Background" Value="{DynamicResource {x:Static uicolors:VSColors.PopupBackgroundTextBrushKey}}" /> 

:

xmlns:uicolors="clr-namespace:VSOmniBox.UI.Colors" 

그리고 PopupBackgroundTextBrushKey는 VSIX 색상 편집기에 의해 생성 된 C#을 속성입니다 :

public static ThemeResourceKey PopupBackgroundTextColorKey { get { return _PopupBackgroundTextColorKey ?? (_PopupBackgroundTextColorKey = new ThemeResourceKey(Category, "PopupBackground", ThemeResourceKeyType.ForegroundColor)); } } 

Visual Studio의 Theming 시스템은 현재 테마를 기반으로 PKGDEF에서 올바른 색 리소스를 반환 할만큼 똑똑하고 모든 표시 가능한 UI를 업데이트합니다.

테마의 전체 샘플은 내 해킹 된, 아직 완료되지 않은 VSOmniBox project에서 찾을 수 있습니다. 코드 품질을 판단하지 마십시오. 매우 나쁜 것 같습니다.

어떤 이유로 든 색상이로드되지 않는 것으로 확인되면 패키지의 설치 디렉토리 (일반적으로 % localappdata % \ Microsoft \ VisualStudio \ 15. *)를 확인하십시오.

devenv.exe /updateconfiguration 

VSIX 색상 편집기를 사용하여 VS 확장 워크로드와 함께 설치되며이에 살고 : "C : \ 프로그램 파일 (x 86 확장 ...)을 PKGDEF를 들어, 다음, 개발자의 명령 프롬프트에서 다음을 실행) \ Microsoft Visual Studio \ 2017 \ Community \ VSSDK \ VisualStudioIntegration \ Tools \ Bin \ VsixColorEditor.exe "