2014-05-14 2 views
1

저는 작은 Xaml/WPF를 알고 있습니다. 나는 자홍색 배경을 가지고 Button에 대한 Windows 8 메트로 응용 프로그램에서 사용자 정의 Style을 디자인하려고하는데, 눌렀을 때 파란색 background.I가 있는데 VisualStateManager을 사용해야한다는 것을 이해하지만 나는 온라인을 찾을 수 없다. 주제에 대한 지식이 거의없는 사람에게 감각을 느낀다. 많은 지식이 있습니다.초보자를위한 VisualStateManager 사용법을 설명합니다.

<Style x:Name="test" TargetType="Button"> 
     <Setter Property="Background" Value="Magenta"/> 
     <Setter Property="Content" Value="Test style" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid>       
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <turn the background blue> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

이 코드는 매우 잘못 될 수도 있지만 내가 말했듯이, 나는 결과를 만들기 위해 내가 함께 이해하지 못하는 정보의 비트를 패치하기 위해 노력했습니다 : 여기에 지금까지있어거야.

당신의 시간

+0

모든 컨트롤의 기본 스타일 템플릿을 연구하여 시작했습니다. 이 예제에서는 기본 Button 컨트롤 스타일 템플릿을 사용하고 처음 몇 시간 동안 처음부터 다시 시작하지 않고 용도에 맞게 편집 할 것을 제안합니다. John이 지적한 것처럼, Blend는 이러한 유형의 작업에 매우 유용합니다. –

답변

5

초보자도 손으로 쓰지 마세요. WPF (Triggers)의 원래 메커니즘은 손쉽게 작성할 수 있었지만 새로운 XAML 플랫폼에서 대체하기위한 VSM은 훨씬 자세하고 디자인 도구에 사용하기 위해 특별히 설계되었습니다.

블렌드에서 편집 작업을 많이하고 나중에 손으로 편집 할 때 자세한 내용을 배우고 싶다면 생성 된 XAML을 살펴볼 수 있습니다. 혼합 상태는 매우 간단합니다. 상태 패널에서 편집 할 상태를 선택하면 미리보기가 표시됩니다. 해당 주를 선택하는 동안 변경 한 사항은 해당 주에서 스토리 보드로 적용됩니다.

1

난 당신이 시각적 상태와 그들이 무엇을위한 것를 만드는 방법에 대한 설명을 작성하는 시간을내어 주변의 많은 사람들이,이 확신 주셔서 감사합니다. 그래도 나는 문서에서 언급되지 않았지만 잘 알고있는 것으로 생각되는 VSM에 대해 설명하기 위해 약간의 시간을 들여야 할 것입니다.

컨트롤의 다른 그래픽 표현간에 변경할 수 있음을 이미 알고 있습니다. 이러한 상태는 범위 (VisualStateGroup) 내에서 제외됩니다. 의미 세 가지 상태를 가진 그룹을 정의 할 수 있습니다. Regular, Pressed 및 MouseOver. 특정 시간에 그룹 내의 하나의 상태 만 적용 할 수 있지만 쓰기 가능 또는 읽기 전용 상태와 같은 다른 그룹과 결합 할 수 있습니다.

올바르게 사용하는 방법 : 특별한 경우를 보지 않으면 일반적으로 하나의 메서드가 UpdateStates(bool useTransitions)이며, 경우에 따라 수천 개를 유지해야합니다.

if (this.IsReadOnly) -> VisualStateManager.GoToState("ReadOnlyState",... 

등의 내부 통제 상태를 확인하십시오 ... 상태가 바뀔 때마다 UpdateStates 메소드가 호출됩니다. 의미는 당신이 DependencyProperties를 가지며 각 (관련) DPChangeHandler (레지스터 호출시)에 대한 것입니다. ChangeHandler 내부에서 UpdateStates 메서드를 호출하고 컨트롤이 어떤 상태를 활성화 할 지 결정하게합니다.

이것은 최소한 MS가 컨트롤 내부에서 수행하는 방법입니다.

조금 도움이 된 희망. :)

+0

부탁해 주셔서 감사합니다. – Ralt