VisualStateGroup 클래스

정의

한 상태에서 다른 상태로 이동하는 데 사용되는 상호 배타적인 VisualState 개체 및 VisualTransition 개체를 포함합니다.

public ref class VisualStateGroup sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
   <VisualStateGroup x:Name="groupname" ...>
     oneOrMoreVisualStates
   </VisualStateGroup>
   <!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
상속
Object Platform::Object IInspectable DependencyObject VisualStateGroup
특성

Windows 요구 사항

디바이스 패밀리
Windows 10 (10.0.10240.0에서 도입되었습니다.)
API contract
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)

예제

이 예제에서는 하나의 그리드를 포함하는 단추에 대한 간단한 ControlTemplate을 만듭니다. 또한 "PointerOver" 및 "Normal" 상태를 정의하는 "CommonStates"라는 VisualStateGroup을 포함합니다. VisualStateGroup에는 사용자가 단추 위에 포인터를 놓을 때 그리드가 녹색에서 빨간색으로 변경되는 데 1초가 걸리도록 지정하는 VisualTransition도 있습니다.

<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

설명

컨트롤 템플릿의 일부로 XAML에서 선언된 각 VisualStateGroup에는 항상 x:Name 특성 이 설정되어 있어야 합니다. 컨트롤 템플릿의 VisualStateGroups 집합에 사용되는 각 이름 문자열은 해당 템플릿에서 고유해야 합니다. 하지만 여러 컨트롤에 동일한 그룹 이름을 사용하는 것이 일반적입니다. 예를 들어 거의 모든 기존 컨트롤 템플릿에는 "CommonStates"의 x:Name 특성 이 있는 VisualStateGroup이 있습니다.

각 VisualStateGroup 내의 시각적 상태 집합은 그룹에서 상호 배타적이어야 합니다. 즉, 컨트롤은 정의된 각 VisualStateGroup 그룹의 시각적 상태 중 하나를 항상 사용해야 합니다. 컨트롤이 두 상태에서 동시에 사용되는 경우가 있을 때마다 두 상태가 서로 다른 그룹에 있는지 확인합니다. 예를 들어 드롭다운 컨트롤이 동시에 집중되고 드롭다운이 열려 있을 수 있습니다. 올바른 시각적 상태 디자인에서는 각 상태에 대해 별도의 VisualStateGroup이 있으므로 둘 다 한 번에 활성화할 수 있습니다. 이러한 그룹에는 "FocusStates" 및 "DropDownStates"와 같은 이름이 있을 수 있습니다.

VisualState 요소 중 하나에서 임시 스토리보드 동작을 사용하도록 설정하는 VisualStateGroup을 정의할 때마다 그룹에 이전 상태를 취소하기 위해 호출할 수 있는 두 번째 VisualState도 포함되어 있는지 확인합니다. 이는 Storyboard가 전혀 없는 두 번째 VisualState를 선언하는 것만큼 간단할 수 있으며 x:Name 특성일 뿐입니다.

VisualStateGroup에 대해 설정한 x:Name 특성 값은 VisualStateManager.GoToState 호출에 사용되지 않습니다. 대신 VisualStateManager.GoToState에 사용되는 VisualStatex:Name 특성입니다. VisualStateManager.GoToState를 사용하는 모든 사람은 사용 가능한 모든 그룹 및 상태를 알고 있어야 하므로 각 호출이 그룹 내의 이전 상태에서 새 상태로 올바르게 전환됩니다.

VisualState 요소 집합 외에도 VisualStateGroup은 각 VisualTransition이 그룹에 정의된 명명된 VisualState 요소 중 하나 이상과 관련된 VisualTransition 요소 집합을 정의할 수도 있습니다. XAML에서 VisualState 요소 집합을 VisualStateGroup 의 직접 개체 요소 자식 요소로 선언할 수 있습니다. 이는 시각적 상태의 컬렉션인 States 속성이 VisualStateGroup의 XAML 콘텐츠 속성이기 때문에 가능합니다. 반면 시각적 전환 컬렉션을 설정하려면 XAML의 VisualStateGroup.Transitions 속성 요소 내에서 해당 컬렉션을 선언해야 합니다. XAML 콘텐츠 속성에 대한 자세한 내용은 XAML 구문 가이드를 참조하세요.

StateTriggers를 사용하여 시각적 상태를 제어하는 경우 트리거 엔진은 다음 우선 순위 규칙을 사용하여 트리거의 점수를 매기고 어떤 트리거와 해당 VisualState가 활성화될지 결정합니다.

  1. StateTriggerBase에서 파생되는 사용자 지정 트리거
  2. MinWindowWidth로 인해 활성화된 AdaptiveTrigger
  3. MinWindowHeight로 인해 AdaptiveTrigger가 활성화됨

점수 매기기에서 충돌이 있는 활성 트리거가 여러 개 있는 경우(즉, 두 개의 활성 사용자 지정 트리거) 태그 파일에 선언된 첫 번째 트리거가 우선합니다.

참고: AdaptiveTriggerStateTriggerBase에서 파생되지만 MinWindowWidth 및/또는 MinWindowHeight 설정을 통해서만 활성화할 수 있습니다.

VisualStateGroup 사용자 지정 VisualStateManager 구현을 지원하는 API

VisualStateGroup의 많은 API는 사용자 지정 VisualStateManager 구현을 지원하기 위해만 존재합니다. 여기에는 Name, CurrentState, CurrentStateChanging, CurrentStateChanged가 포함됩니다. 컨트롤 템플릿에 대한 시각적 상태의 가장 일반적인 사용은 이러한 API가 필요하지 않습니다. 특히 이벤트를 처리하는 것은 일반적이지 않습니다. 컨트롤에 대한 대부분의 논리 작업에는 자체 속성 및 이벤트가 포함되어야 합니다. 대부분의 앱 및 컨트롤 정의 시나리오에서 컨트롤에 발생하는 시각적 상태 변경은 컨트롤이 다른 논리에 대한 트리거가 아니라 해당 템플릿에 적용되는 논리의 최종 결과여야 합니다.

생성자

VisualStateGroup()

VisualStateGroup 클래스의 새 instance 초기화합니다.

속성

CurrentState

GoToState 메서드에 대한 성공적인 호출에서 가장 최근에 설정된 VisualState를 가져옵니다.

Dispatcher

이 개체가 연결된 CoreDispatcher 를 가져옵니다. CoreDispatcher는 코드가 비 UI 스레드에서 시작되더라도 UI 스레드에서 DependencyObject에 액세스할 수 있는 기능을 나타냅니다.

(다음에서 상속됨 DependencyObject)
Name

VisualStateGroup의 이름을 가져옵니다.

States

상호 배타적인 VisualState 개체의 컬렉션을 가져옵니다.

Transitions

VisualTransition 개체의 컬렉션을 가져옵니다.

메서드

ClearValue(DependencyProperty)

종속성 속성의 로컬 값을 지웁니다.

(다음에서 상속됨 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

애니메이션이 활성화되지 않은 경우에 적용되는 종속성 속성에 대해 설정된 기본 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
GetValue(DependencyProperty)

DependencyObject에서 종속성 속성의 현재 유효 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
ReadLocalValue(DependencyProperty)

로컬 값이 설정된 경우 종속성 속성의 로컬 값을 반환합니다.

(다음에서 상속됨 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

DependencyObject instance 특정 DependencyProperty에 대한 변경 내용을 수신 대기하기 위한 알림 함수를 등록합니다.

(다음에서 상속됨 DependencyObject)
SetValue(DependencyProperty, Object)

DependencyObject에 대한 종속성 속성의 로컬 값을 설정합니다.

(다음에서 상속됨 DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

RegisterPropertyChangedCallback을 호출하여 이전에 등록된 변경 알림을 취소합니다.

(다음에서 상속됨 DependencyObject)

이벤트

CurrentStateChanged

컨트롤이 다른 상태로 변경된 후에 발생합니다.

CurrentStateChanging

컨트롤이 다른 상태로 변경되기 시작할 때 발생합니다.

적용 대상

추가 정보