2011-05-11 5 views
3

저는 Caliburn Micro를 사용하여 간단한 MVVM WPF 응용 프로그램을 개발하고 있습니다.활성 뷰에 따라 WPF 버튼 스타일 지정

내 ShellView에는 하나의 ContentControl과 각 ShellViewModel의 공용 메소드에 바인딩하는 3 개의 버튼이 있습니다. ActivateView1, ActivateView2 및 ActivateView3을 말하면됩니다.

내 ShellViewModel은 도체에서 상속 및 각 방법은 ActivateItem(new View1ViewModel())를 호출 활성화 등

지금까지 너무 좋아. 버튼을 클릭하면 ContentControl에서 새보기가 활성화됩니다. 문제는 "관련 뷰"가 활성 상태 일 때 스타일을 변경하기 위해 각 단추가 필요하며이 기능을 달성하는 방법을 실제로 알지 못한다는 것입니다. 의견 있으십니까?

저는 Caliburn Micro 및 WPF 스타일링에 상당히 익숙해 져 있으므로 어떤 도움을 주시면 감사하겠습니다. 당신이 스타일을 작성하고 버튼에 스타일을 추가 할 수 있습니다

이것에 대해 매우 확실하지 않다 그러나 아직도 나는 이런 식으로 뭔가 생각할 수

답변

1

. 이 같은 것을

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
      <Style.Triggers> 
       <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="Fill" TargetName="yourButtonName" Value="Black"/> 
         <Setter Property="Margin" TargetName="yourButtonName" Value="5,0,5,0"/> 
       </Trigger> 
      </Style.Triggers> 
</Style> 

그리고이 스타일을 버튼에 추가 할 수 있습니다.

+0

일을 못해 그 ... 나는 그것이 트릭을 수행 생각

<Trigger Property ="IsPressed" Value ="True"> 

를 사용할 수 있습니다. 다른 단추를 누르고 anoter보기가 활성화되면 해당 스타일을 더 이상 활성화하지 말아야합니다. – Vern

+0

다른 트리거 조치를 추가하고 설정 도구 값 – nipiv

+0

을 추가 할 수 있습니다. 활성 - 버튼을 눌렀을 때만 나타납니다. 컨텐트 컨트롤에 표시되는 현재 뷰와 "동기화"되어야합니다. 내 ViewModel에서 세 가지 부울 속성을 만들고 뷰 변경이 발생할 때 업데이트하는 방법에 대해 생각했습니다. 그것에 대해 어떻게 생각하세요. – Vern

0

난 당신이 사용할 수있는 두 가지 옵션을 생각할 수 있습니다 :

당신은 당신 ShellViewModel의 속성에 버튼 스타일의 속성을 바인딩 할 수 있습니다. 이러한 속성에서 당신은 스타일을 확인할 수 있습니다하는 것은 껍질 활성 뷰를 기반으로 돌아가려면, 즉

return ActiveItem == button1ViewModel ? 
        (Style) App.Current.Resources["Button1ActiveStyleKey"] : 
        (Style) App.Current.Resources["Button1InactiveStyleKey"]; 

이 당신의 ViewModel 당신이 원하는하지 않을 수 있습니다 스타일을 알고 있어야 것이라는 점을 의미 할 것입니다. 그런 경우 옵션 인 경우 두 개의 클릭 버튼의 스타일을 변경하는 Caliburn.Micro IResult를 작성하고 버튼을 통해 호출되는 코 루틴에서 (각 버튼에 대해 하나의) 사람들의 3을 반환하는 것 즉

public IEnumerable<IResult> ButtonOneClicked() 
{ 
    yield return new ChangeButtonStyle("Button1Name", "Button1ActiveStyleKey"); 
    yield return new ChangeButtonStyle("Button2Name", "Button2InactiveStyleKey"); 
    yield return new ChangeButtonStyle("Button3Name", "Button3InactiveStyleKey"); 
} 

ChangeButtonStyle IResult의 구현은 매개 변수를 통해 IResult.Execute에 제공된보기를 검색하여 ChangeButtonStyle ctor의 첫 번째 매개 변수에 제공된 이름으로 컨트롤을 검색 한 다음 제공된 리소스 키를 사용하여 해당 컨트롤의 스타일 속성을 설정합니다. 두 번째 매개 변수는 ChangeButtonStyle ctor입니다.

관련 문제