2010-06-11 10 views
1

난 정말 재주문을 변경하여 멋진 스키닝 지원 때문에 WPF를 좋아하지만, 캐치는 스타일이 XAML의 디자이너에 의해 만들어 져야합니다. 내 클라이언트는 최종 사용자가 스킨을 스스로 만들 수있는 skinnable UI가 필요합니다. 내 질문 -WPF 스타일을 사용자 정의 할 수 있습니까?

Photoshop에서는 모든 이미지를 찍을 수 있으며 모든 색을 해당 색조로 변경하기 위해 색 오버레이를 추가 할 수 있습니다. WPF에서 비슷한 것을 할 수 있습니까? 나는 초보자 일 뿐이며 여러 WPF 스타일을 살펴보면 모든 색상 값이 하드 코딩 된 것처럼 보입니다.

예제 시나리오는 사용자가 색상 선택기에서 두 가지 색상을 선택하고 모든 컨트롤의 색상 배경이 Color1에서 Color2까지입니다.

EDIT : 색상을 XML 파일에 저장하고 다시로드 할 수 있습니까?

답변

1

의 핵심은 스타일이 DynamicResource 또는 바인딩을 포함 할 수있는 것을 깨닫게하는 것입니다, 그래서 당신의 스타일 인 경우 : 당신이 "UserSelectedBackground"리소스로 설정

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{DynamicResource UserSelectedBackground}" /> 
    ... 
</Style> 

아무것도 모든 버튼에 적용됩니다.

또는 당신은 뷰 모델 객체에 바인딩 할 수 있습니다 ButtonBackground이 SkinModel 인스턴스 변화, 모든 버튼 배경이 자동으로 업데이트됩니다 때마다 이제

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Background" Value="{Binding ButtonBackground, Source={x:Static my:SkinModel.Instance}" /> 
    ... 
</Style> 

합니다.

사용자가 그래디언트 채우기의 두 끝을 개별적으로 제어 할 수있게하려면 색상 선택기로 양방향에서 바인딩 된 두 개의 SolidColorBrush 속성을 SkinModel에 만듭니다. 이러한 속성이 변경 될 때마다 ButtonBackground 속성 (DependencyProperty의 PropertyChangedCallback 또는 CLR 속성 설정자)을 다시 계산합니다.

파일에 상태를 저장하는 것은 간단합니다. XamlWriter를 사용하여 SkinModel을 XAML로 직렬화 한 다음 파일에 기록하기 만하면됩니다. 나중에로드하려면 XamlReader.Parse 만 사용하면됩니다.

0

XML/DataBase (sqllite가 적합 할 수도 있음)에 색상 값을 저장하고 컨트롤이 바인딩 할 클래스에 넣을 수 있습니다. 그렇게하면 사용자가이 데이터를 변경할 수있는 colorpicker를 사용할 수 있습니다.

관련 문제