5

DependencyProperties을 사용하여 기본 프레임 워크 요소에 사용자 지정 이벤트 처리기를 추가하려고합니다. 다음과 같은XAML에서 사용자 지정 EventHandlers를 설정하기위한 종속성 만들기 속성

뭔가 :

여기
public class MyPage : Page{ 
    public void someHandler(object sender, EventArgs e){ 
     //do something 
    } 
} 

내가 정의 된 클래스를 상상하는 방법의 거친 샘플입니다 : 여기

<Border custom:MyProps.HandleMyEvent="someHandler">...</Border> 

은 테두리 요소를 포함하는 컨트롤의 코드 뒤에입니다 재산 :

public class MyProps{ 
    public event EventHandler MyInternalHandler; 
    public static readonly DependencyProperty HandleMyEventProperty = ... 
    public void SetHandleMyEvent(object sender, EventHandler e){ 
     MyInternalHandler += e; 
    } 
} 

문제는 내가 모른다/전혀 찾지 못했다는 것이다. DependencyProperties을 이벤트/위임자와 EventHandlers과 결합하는 방법을 알려줍니다.

실마리가 있습니까?

+0

이 솔루션의 문제점에 대한 힌트를 얻을 수 있습니까? 이벤트를 기본 프레임 워크 요소에 추가하려는 경우 하위 클래스 만 사용하거나 비헤이비어를 사용하십시오. –

답변

5

저는 이것이 WPF와 관련이 없다고 가정 할 것입니다. 이것은 실버 라이트 질문입니다.

먼저 기존 컨트롤에 Event을 추가 할 수 없습니다. 이벤트가 다르게 처리되는 반면에 첨부 된 Properties을 모두 추가하면 속성이 아닙니다.

이 이벤트가있는 새 유형을 만든 다음이 유형의 연결된 속성을 만들어야합니다.

여기에 단순히 이벤트가있는 기본 유형입니다 : -

public class MyEventer 
{ 
    public event EventHandler MyEvent; 

    // What would call this?? 
    protected void OnMyEvent(EventArgs e) 
    { 
     if (MyEvent != null) 
     MyEvent(this, e); 
    } 
} 

이제 우리는 그 속성으로 MyEventer이있는 연결된 속성을 작성, 나는 별도의 정적 클래스에 이들을 배치하는 것을 선호합니다.

public static class MyProps 
{ 

    public static MyEventer GetEventer(DependencyObject obj) 
    { 
    return (MyEventer)obj.GetValue(EventerProperty); 
    } 

    public static void SetEventer(DependencyObject obj, MyEventer value) 
    { 
    obj.SetValue(EventerProperty , value); 
    } 

    public static readonly DependencyProperty EventerProperty = 
     DepencencyProperty.RegisterAttached("Eventer", typeof(MyEventer), typeof(MyProps), null) 

    } 
} 

이제이 같은 컨트롤이 첨부 : -

<Border ...> 
    <custom:MyProps.Eventer> 
     <custom:MyEventer MyEvent="someHandler" /> 
    </custom:MyProps.Eventer> 
</Border> 

이 프로젝트를 컴파일 할 경우이 XAML을 쓰기 전에 당신이 생성하는 비주얼 스튜디오는 당신에게 옵션을 제공 않습니다 것 당신을 위해 뒤에 코드에서 이벤트 처리기.

물론 이것은 여전히 ​​중요한 질문을 남깁니다. 어떻게 이벤트를 시작하려고합니까?

+0

이벤트는 내가 작성한 프레임 워크에 의해 해고되었습니다. 그리고 올바르게 설명하면 사용자 정의 처리기를 쉽게 트리거 할 수있는 OnMyEvent 함수가 필요했습니다. 이제 사용자는 XAML의 탭 키를 사용하여 사용자 지정 처리기를 정의하거나 새 처리기를 생성 할 수 있습니다. 매우 좋았습니다. 추가 ..> ..>없이 직접 DependencyProperty를 선호 했더라도 좋습니다. <테두리 c : MyProps.MyHandler = "..."/> 사용하는 것이 좋습니다. 어쨌든 귀중한 의견을 보내 주셔서 감사합니다. :) – Juve

+0

꽤 나쁜 명명 규칙 준수. –

관련 문제