문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

사용자 지정 트리거 및 작업 만들기(Silverlight용 Blend SDK)

Triggers Actions은 원인과 결과 관계를 모델링합니다. Trigger 는 원인에 반응하고 하나 이상의 Actions을 호출합니다.

Trigger 는 특정 조건(예: 이벤트 발생 또는 특정 값으로 설정되는 속성)을 수신 대기하고, 반응에 따라 하나 이상의 연결된 Actions을 호출하는 개체입니다. Triggers 는 마우스 또는 키보드 이벤트가 CollisionTrigger 에 발생될 때의 Action 부터 두 개체가 서로 충돌 하는 경우의 Action 을 발생시키는 EventTrigger이다. Triggers 는 확장 가능하므로 원하는 만큼 창조적으로 사용자 지정 트리거를 만들 수 있습니다. 런타임 시 Behaviors에 의해 인식되도록 하기 위해서는 Trigger에 특정 기본 구문이 포함되어야 합니다.

다음 코드 예제는 기준선 Trigger을 보여줍니다.

public class Trigger1 : TriggerBase<DependencyObject>
{
    protected override void OnAttached()
    {
        base.OnAttached();

        // Insert code that you want to run when the Trigger is attached to an object.
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();

        // Insert code that you want to run when the Trigger is removed from an object.
    }

    //
    // To invoke any associated Actions when this Trigger gets called, use
    // this.InvokeActions(o), where o is an object that you can pass in as a parameter.
    //
}

이전 코드 샘플에서 클래스는 System.Windows.Interactivity.dll에 제공된 형식인 TriggerBase에서 확장됩니다. 클래스가 TriggerBase 클래스에서 확장되면 코드 샘플에 표시된 대로 OnAttachedOnDetaching 메서드를 재정의할 수 있습니다.

Trigger AssociatedObject와 분리되기 직전에 OnDetaching이 호출됩니다. 이것은 개체를 계속 Trigger 범위에서 사용할 수 있으므로, OnDetaching이 끝날 때까지 코드가 계속 작용될 수 있음을 의미합니다. 예를 들어, 이벤트 핸들러를 분리하는 경우가 있습니다.

Trigger 를 실제로 발생하게 하는 것이 가장 중요합니다. Trigger 를 발생하게 하려면 InvokeActions 메서드를 호출해야 합니다. InvokeActions 가 호출되면 이 Trigger와 연결된 Actions에게 작동하도록 알려줍니다.

Trigger 는 발생할 사항만 수신 대기할 수 있는 개체입니다. Action 은 특정 사항을 수행할 수만 있는 개체입니다.

다음 코드 예제는 기준선 Action을 보여줍니다.

public class MyAction : TriggerAction<DependencyObject>
{
    public MyAction()
    {
        // Insert code required for object creation below this point.
    }

    protected override void Invoke(object o)
    {
        // Insert code that defines what the Action will do when it is triggered or invoked.
    }
}

Trigger Invoke 메서드를 호출하므로 Invoke 메서드 내 특정 형식으로 Action을 실행하려는 코드에 액세스할 수 있는지 확인하십시오. 다음 코드 예제는 호출될 때 MessageBox를 표시하는 Action을 나타냅니다.

public class ShowMessageBoxAction : TriggerAction<DependencyObject>
{
    public string Message
    {
        get { return (string)GetValue(MessageProperty); }
        set { SetValue(MessageProperty, value); }
    }

    public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(ShowMessageBoxAction), new PropertyMetadata(""));

    public ShowMessageBoxAction()
    {
        // Insert code required for object creation below this point.
    }

    protected override void Invoke(object o)
    {
        MessageBox.Show(Message);
    }
}

이전 코드 샘플에서 Action은 앞서 표시된 단순 Action보다 복잡하지만 작업을 Action 하는 공통 특성은 여전히 존재합니다. ShowMessageBoxAction TriggerAction에서 확장되고 Invoke 메서드를 재정의합니다.

Action 이 영향을 미치는 대상을 변경할 수 있지만 기본적으로 Action은 Action에 연결된 요소인 AssociatedObject 속성에만 액세스할 수 있습니다. Action 의 대상을 다른 요소로 지정하려면 TriggerAction 대신 TargetedTriggerAction에서 해당 Action을 나타내는 클래스를 확장합니다.

public class MyAction : TargetedTriggerAction<DependencyObject>
{
    // See TriggerAction in the preceding code sample...
}

TargetedTriggerAction 에서 클래스를 확장한 후, TargetNameTarget 속성을 사용하여 대상으로 지정된 요소에 액세스할 수 있습니다. AssociatedObject 는 항상 현재 Action과 연결된 요소를 가리키므로 AssociatedObjectTargetName 또는 Target 속성을 서로 바꿔가며 사용하지 않도록 하십시오.

표시: