1

(메트로) :어떤 조건을 기반으로 VisualState를 활성화/비활성화하는 방법은 무엇입니까? 내가 A A의 ControlTemplate에있는 버튼 VisualState 정의

<ControlTemplate x:Key="ButtonTemplate" TargetType="Button"> 
     ... 
     <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="CommonStates"> 
      ... 
      <VisualState x:Name="PointerOver"> 
      <Storyboard> 
       <DoubleAnimation Storyboard.TargetName="c1" Storyboard.TargetProperty="Opacity" To="0.7"/> 
      </Storyboard> 
      </VisualState> 
      ... 
     </VisualStateGroup> 
     </VisualStateManager.VisualStateGroups> 
     ... 
    </ControlTemplate> 

그러나이 효과 (마우스 오버 불투명도를 변경)는 뷰 모델의 조건에 따라 활성화/비활성화, 그래서 어떻게합니까해야 XAML과 그거?

Stoyboard가 고정되어 있기 때문에 DoubleAnimation의 To 값에 대한 바인딩을 만들려고했으나 작동하지 않습니다. 또한 템플릿 선택기처럼 sth를 생각하고 있지만 VisualState Manager에는 그런 것이 없습니다.

답변

1

저는 최근에 누군가와 논의 중이었고 WPF의 DataTriggers와 유사한 방식으로 작동하는 WinRT XAML Toolkit에 일반적인 해결책을 추가 할 수있었습니다. 그러나 지금은 DependencyProperty을 컨트롤에 추가하고 bind 보기 모델의 속성 및 값 변경 - 시각적 상태를 업데이트합니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 "시각적 상태 업데이트"라고 말하면 "다른 시각적 상태로 전환"또는 "VisualStateManager의 논리 트리 변경"을 의미합니까? 이전의 경우 "PointerOver"상태가 마우스 동작에 의해 트리거 될 수 있기 때문에 작동하지 않습니다. 따라서 수동으로 다른 상태로 전환하더라도 "PointerOver"상태는 여전히 살아 있으며 마우스를 움직이면 트리거됩니다 내가 "불가능하게"할 수 없다면 끝났어. 후자의 경우 C#에서 VisualState 개체를 먼저 찾아야하지만 시각적 트리에없는 것 같습니다. (Button에서 GetDescendants()를 사용하여 찾을 수 없음) –

+1

"다른 시각적 상태로 전환"을 의미했습니다. 'PointerOver'가 Button의 로직에 의해 오버라이드 된 경우 - Storyboard를 지우고 새로운 'VisualStateGroup'에 커스텀'CustomPointerOver' 상태를 추가하십시오 또는 그것을 무시하십시오. 나는 당신이 런타임에'VisualStateGroup'의 설정을 수정할 필요가 없다고 생각하지만, GetDescendants()는 시각 트리 요소 ('UIElement's)에서만 작동하고'VisualStateManager'는 하나가 아닙니다. –

+0

감사. 그것은 효과가있다! 동일한 VisualStateGroup에서 혼합 된 상태를 사용할 수 있다고 생각하지 않았습니다 (Button은 알고 있고 모름). PointerEntered 이벤트를 처리하고 내 CustomPointerOver 상태로 이동할지 여부를 결정하는 조건을 기반으로합니다. –