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에는 그런 것이 없습니다.
답장을 보내 주셔서 감사합니다. 그러나 "시각적 상태 업데이트"라고 말하면 "다른 시각적 상태로 전환"또는 "VisualStateManager의 논리 트리 변경"을 의미합니까? 이전의 경우 "PointerOver"상태가 마우스 동작에 의해 트리거 될 수 있기 때문에 작동하지 않습니다. 따라서 수동으로 다른 상태로 전환하더라도 "PointerOver"상태는 여전히 살아 있으며 마우스를 움직이면 트리거됩니다 내가 "불가능하게"할 수 없다면 끝났어. 후자의 경우 C#에서 VisualState 개체를 먼저 찾아야하지만 시각적 트리에없는 것 같습니다. (Button에서 GetDescendants()를 사용하여 찾을 수 없음) –
"다른 시각적 상태로 전환"을 의미했습니다. 'PointerOver'가 Button의 로직에 의해 오버라이드 된 경우 - Storyboard를 지우고 새로운 'VisualStateGroup'에 커스텀'CustomPointerOver' 상태를 추가하십시오 또는 그것을 무시하십시오. 나는 당신이 런타임에'VisualStateGroup'의 설정을 수정할 필요가 없다고 생각하지만, GetDescendants()는 시각 트리 요소 ('UIElement's)에서만 작동하고'VisualStateManager'는 하나가 아닙니다. –
감사. 그것은 효과가있다! 동일한 VisualStateGroup에서 혼합 된 상태를 사용할 수 있다고 생각하지 않았습니다 (Button은 알고 있고 모름). PointerEntered 이벤트를 처리하고 내 CustomPointerOver 상태로 이동할지 여부를 결정하는 조건을 기반으로합니다. –