2010-03-30 2 views
3

활성 테마를 기반으로 변경되는 시스템 색상을 기반으로하는 일부 일반 색상이 내 응용 프로그램에 있어야합니다. 그래서 나는 시스템 컬러 브러쉬가 주어 졌을 때 브러시를 반환하는 IValueConverters가 필요하다고 생각합니다.WPF SystemColors를 기반으로하는 일반적인 색상

하지만 로직을 어디에 넣어야합니까? 내가 본 것처럼 나는 2 가지 옵션을 가질 수 있습니다.

옵션 1) SolidColorBrush를 테마 리소스 사전에 배치합니다.이 리소스 사전은 일부 시스템 색에 바인딩되어 새 Brush (es)로 변환됩니다. 시도해 보았지만 제대로 작동하는 것 같지만,이 새로운 SolidColorBrush를 코드 숨김에서 어떻게 참조 할 수 있습니까?

옵션 2) SystemColors 클래스와 비슷한 클래스를 만듭니다. 나는이 일을 어떻게 그냥하는지에 대해 잘 모릅니다. SystemColors 클래스의 SystemResourceKey와 Brush 사이의 관계는 무엇입니까? 어떻게 연결되어 있습니까?

답변

0

1 예를 들어,

최고 감사합니다, 예스퍼

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:Test"> 
    <SolidColorBrush x:Key="Brush1" Color="Green"/> 
</ResourceDictionary> 
ResourceDictionary dict = new ResourceDictionary(); 
dict.Source = new Uri("pack://application:,,,/TestDictionary.xaml"); 
Brush brush1 = dict["Brush1"] as SolidColorBrush; 

2. 당신은 SystemResourceKeys을 사용할 수 없습니다, 그들은 내부 있지만, 아마 당신의 사전을 구축 할 수는 systemColors 클래스의 키를 다시 사용할 수 있습니다, 당신이 사용합니까 정말 무슨하는 키는 모든 객체가 될 수 있습니다. this question이 중요 할 수 있습니다.

관련 문제