2017-10-11 20 views
3

모드 A에 스타일 템플릿이있는 버튼이 있습니다. 모드 A에서이 버튼에는 PointerOver VisualState가 있습니다. 모드 B에있을 때 같은 버튼을 사용하지만 모드 B에서는 다른 PointerOver VisualState를 갖고 싶습니다.하나의 요소에 대해 두 개의 스타일 템플릿을 사용할 수 있으며 코드 배후에서 사용할 템플릿을 결정할 수 있습니까?

시각적 상태를 활용하여 이와 같은 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 두 개의 서로 다른 스타일 템플릿을 동일한 버튼에 대해 생각하고 어떻게 든 스타일 템플릿을 뒤에서 코드에서 사용할 수 있는지는 모르겠다. 이것이 가능한지 또는 이것이 가장 좋은 방법인지 알아 보겠다.

제안 사항?

+0

나는 그것이하기 쉽다고 생각한다. – lindexi

+0

템플릿과 스타일 모두 사용 –

답변

2

뒤에 코드에서이 시도 :

[control name].Style = this.FindResource("[style key]") as Style; 

는 또한 "스타일 템플릿"는 오해 나에게 할 수있는 스타일을 호출하지 않아야합니다. 스타일과 템플릿은 다른 두 가지입니다.

  • 템플릿은 지정된 컨트롤이 어떻게 구성되는지 정의합니다. 예를 들어 ButtonBorderTextBlock (또는 다른 컨트롤을 사용)을 사용하여 빌드 된 경우.
  • 스타일은 주어진 컨트롤이 어떻게 보이는지 (템플릿은 해당 속성 중 하나임) 설명하는 속성 집합을 정의합니다.
0

또 다른 옵션은 ConverterButton이어야 Style를 결정하기 위해 사용하는 것입니다.

변환기 :

public class ButtonStyleConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
    var mode = (int)value; 
    return mode == 1 ? Application.Current.Resources["ButtonStyle1"] as Style : Application.Current.Resources["ButtonStyle2"] as Style; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
    //Do nothing 
    } 
} 

사용법 :

<Button Content="Hello" Style="{Binding Button1Mode, Converter={StaticResource ButtonStyleConverter}}"/> 
<Button Content="World" Style="{Binding Button2Mode, Converter={StaticResource ButtonStyleConverter}}" /> 

내가 이론적으로 버튼이 런타임에있는 "모드"를 수정할 수있는 것입니다 내 뷰 모델에 속성에 Binding를 사용 데이터에 따라 다릅니다. 이것에 더 많은 코드가 필요한 경우 Github에 예제를 게시하게되어 기쁩니다.