2013-09-26 4 views
-1

기본 스타일을 약간 변경하고 일반적인 패딩이나 여백 등을 추가하는 WPF 응용 프로그램이 있습니다. 나는 보통 Window.Resources 또는 일부 리소스 사전 중 하나를 사용하여 창이나 응용 프로그램의 리소스에로드합니다. 스타일의 예는 다음과 같습니다.사용자 테마에 따라 다른 스타일 적용

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Margin" Value="5" /> 
</Style> 

지금까지 그렇게 좋았습니다. 사용자 구성 요소가 아닌 기본 구성 요소를 변경하려고합니다.

오늘은 윈도우 8에서 사용되는 Aero2 테마 내가 윈도우 7의 에어로 테마에서 사용하고보다 몇 가지 표준 스타일을 함께 제공 것으로 나타났습니다. 불행하게도 나는 둘 모두에서 작동 할 수있는 제네릭 스타일을 실제로 만들 수 없었다.

그래서 사용자가 사용중인 테마에 따라 다른 스타일을 지정할 수 있기를 원합니다. 예를 들어 사용자가 에어로을 사용하는 경우 Aero-styles.xaml을로드하고 Windows 8에서 Aero2 인 경우 Aero2-styles.xaml을로드하고 싶습니다.

Themes 디렉토리를 사용하고 Aero.NormalColor.xamlAero2.NormalColor.xaml을 제공하면 이것이 가능할 것으로 기대하고 있습니다. 불행히도 사용자 정의 컨트롤에 대해서만 작동하는 것으로 보이지만 내장 컨트롤에는 사용할 수 없습니다. 또한 정적/동적 참조로 사용할 수있는 키를 사용할 수 없습니다.

이 방법이 있습니까? 사용자 정의가 포함 된 기본 리소스 사전을 제공하고 사용 된 테마를 약간 수정 한 다른 테마 종속 사전을 제공 하시겠습니까?

+0

MSDN에서 관련 질문이 있으면 불행히도 명확한 답변이 없습니다. http://social.msdn.microsoft.com/Forums/vstudio/en-US/c9cb36dc-bc85-45a8-80b2-56dbfe24c5c9/how-to-apply- 스타일 기반의 현재 테마 – poke

답변

-1

(UI를로드하기 전에) 시작할 때 테마를 감지하고 적절한 ResourceDictionary를 Application.Resources.MergedDictionaries에 동적으로 추가하십시오. 이것은 나를 위해 일했습니다.

+0

이 작업을 수행하는 방법에 대한 예제를 제공 할 수 있습니까? 특히 * 테마 감지 * 부분? 지금까지 발견 한 모든 솔루션은 상당히 해킹되었거나 Windows 8의 "Aero2"를 탐지하지 못했습니다. – poke

관련 문제