VisualStateManager 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
컨트롤의 상태 간 전환에 사용되는 상태 및 논리를 관리합니다.
public ref class VisualStateManager : System::Windows::DependencyObject
public class VisualStateManager : System.Windows.DependencyObject
type VisualStateManager = class
inherit DependencyObject
Public Class VisualStateManager
Inherits DependencyObject
- 상속
예제
다음 예제에서는 를 만들고 Rectangle 라는 를 CommonStates
연결된 속성에 VisualStateManager.VisualStatesGroups
추가합니다VisualStateGroup. 이 예제에서는 의 MouseOver
및 Normal
VisualState 개체를 CommonStates
VisualStateGroup정의합니다. 사용자가 마우스 포인터를 위로 Rectangle이동하면 1초 동안 빨간색에서 녹색으로 변경됩니다. 사용자가 직사각형에서 마우스를 이동하면 즉시 Grid 다시 빨간색으로 변경됩니다. 상태는 를 Normal
정의 Storyboard하지 않습니다. Storyboard 가 상태에서 상태로 Normal
MouseOver
Storyboard 전환 MouseOver
될 때 Rectangle 의 가 중지되고 Color 의 속성 SolidColorBrush 이 빨간색으로 반환되기 때문에 은 필요하지 않습니다.
<Rectangle Name="rect"
Width="100" Height="100"
MouseEnter="rect_MouseEvent"
MouseLeave="rect_MouseEvent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="MouseStates">
<VisualState Name="MouseEnter">
<Storyboard>
<ColorAnimation To="Green"
Storyboard.TargetName="rectBrush"
Storyboard.TargetProperty="Color"/>
</Storyboard>
</VisualState>
<VisualState Name="MouseLeave" />
<VisualStateGroup.Transitions>
<VisualTransition To="MouseLeave" GeneratedDuration="00:00:00"/>
<VisualTransition To="MouseEnter" GeneratedDuration="00:00:00.5">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="10"/>
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectBrush" Color="Red"/>
</Rectangle.Fill>
</Rectangle>
다음 예제에서는 이전 예제에서 정의한 이벤트 처리기를 보여 하며 메서드를 GoToElementState 호출하여 상태 간에 전환합니다. 이전 예제의 사각형이 의 ControlTemplate일부인 경우 예제에서는 메서드를 GoToState 호출해야 합니다.
private void rect_MouseEvent(object sender, MouseEventArgs e)
{
if (rect.IsMouseOver)
{
VisualStateManager.GoToElementState(rect, "MouseEnter", true);
}
else
{
VisualStateManager.GoToElementState(rect, "MouseLeave", true);
}
}
Private Sub rect_MouseEvent(ByVal sender As Object, ByVal e As MouseEventArgs)
If rect.IsMouseOver Then
VisualStateManager.GoToElementState(rect, "MouseEnter", True)
Else
VisualStateManager.GoToElementState(rect, "MouseLeave", True)
End If
End Sub
설명
를 VisualStateManager 사용하면 컨트롤의 상태, 컨트롤이 특정 상태일 때의 모양 및 컨트롤 상태가 변경되는 경우를 지정할 수 있습니다. 예를 들어, 한 Button 를 누를 때 보다 누를 때 이와 약간 다르게 표시 해야 할 수 있습니다. 두 개의 상태를 Button 정의 누를 때 해당 하 ("Pressed"
)이 아닐 때 및 ("Normal"
). 컨트롤이 상태에 있을 때의 모양은 에 의해 VisualState정의됩니다. VisualState 에는 컨트롤이 Storyboard 해당 상태에 있을 때 컨트롤의 모양이 변경되는 방식을 지정하는 개체 컬렉션이 포함되어 있습니다. 컨트롤에서 연결된 속성을 설정 VisualStateManager.VisualStateGroups
하여 컨트롤에 시각적 상태를 추가합니다. 각각 VisualStateGroup 에는 상호 배타적인 개체 컬렉션 VisualState 이 포함되어 있습니다. 즉, 컨트롤은 항상 각 VisualStateGroup의 정확히 하나의 상태에 있습니다.
VisualStateManager 또한 을 사용하면 컨트롤이 특정 상태에 들어갈 때를 지정할 수 있습니다. 상태를 변경하기 위해 호출해야 하는 메서드는 시나리오에 따라 달라집니다. 에서 을 사용하는 컨트롤을 VisualStateManagerControlTemplate만드는 경우 메서드를 호출합니다 GoToState . 만드는 방법에 대 한 자세한 내용은 사용 하는 컨트롤에 대해를 VisualStateManager를 참조 하세요 모양을 사용자 지정할 수는 제어 된 만들기합니다. 의 외부를 VisualStateManager 사용하는 경우(예: 또는 단일 요소에서 을 UserControl 사용하는 VisualStateManager 경우) 메서드를 호출합니다GoToElementState.ControlTemplate 두 경우 모두 은 VisualStateManager 관련 상태와 연결된 스토리보드를 적절하게 시작하고 중지하는 데 필요한 논리를 수행합니다. 예를 들어 컨트롤이 각각 연결된 스토리보드가 있는 상태 State1
및 State2
를 정의한다고 가정합니다. 컨트롤이 에 State1
있고 또는 GoToElementState에 GoToState 전달 State2
하면 는 VisualStateManager 에서 State2
스토리보드를 시작하고 에서 State1
스토리보드를 중지합니다.
WPF(Windows Presentation Foundation)에 포함된 컨트롤은 를 VisualStateManager 사용하여 시각적 상태를 변경합니다. WPF에 포함된 컨트롤에 대한 을 ControlTemplate 만들 때 컨트롤에 ControlTemplate 개체를 추가하여 VisualState 컨트롤의 모양을 특정 상태로 지정할 수 있습니다. WPF에 포함된 컨트롤에 대한 시각적 상태의 이름을 찾으려면 컨트롤 스타일 및 템플릿을 참조하세요. 컨트롤의 논리는 상태 간 전환을 처리하므로 새 ControlTemplate에서 개체를 정의하는 VisualState 것 외에는 아무 작업도 수행할 필요가 없습니다. 기존 컨트롤에 대한 컨트롤 템플릿을 만드는 방법에 대한 자세한 내용은 ControlTemplate을 만들어 기존 컨트롤의 모양 사용자 지정을 참조하세요.
상태 간 전환을 위해 고유한 논리를 구현하려면 에서 VisualStateManager상속하고, 메서드를 재정의 GoToStateCore 하고, 사용자 지정 논리를 사용하는 컨트롤에 연결된 속성을 설정 VisualStateManager.CustomVisualStateManager 해야 합니다.
생성자
VisualStateManager() |
VisualStateManager 클래스의 새 인스턴스를 초기화합니다. |
필드
CustomVisualStateManagerProperty |
CustomVisualStateManager 종속성 속성을 나타냅니다. |
VisualStateGroupsProperty |
VisualStateGroups 종속성 속성을 나타냅니다. |
속성
DependencyObjectType |
DependencyObjectType 이 instance CLR 형식을 래핑하는 을 가져옵니다. (다음에서 상속됨 DependencyObject) |
Dispatcher |
이 Dispatcher와 연결된 DispatcherObject를 가져옵니다. (다음에서 상속됨 DispatcherObject) |
IsSealed |
이 인스턴스가 현재 봉인되어 있는지(읽기 전용인지) 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 DependencyObject) |
연결된 속성
CustomVisualStateManager |
컨트롤의 상태를 전환하는 VisualStateManager 개체를 가져오거나 설정합니다. |
VisualStateGroups |
VisualStateGroup 개체의 컬렉션을 가져오거나 설정합니다. |
메서드
적용 대상
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기