2010-12-22 3 views
2

내 UserControl에 버튼이 있습니다. 단추의 Click 이벤트를 UserControl 사용자에게 을 직접 전달해야합니다. 그들은 이것을 'ButtonClick'이라는 이벤트로 보게됩니다.UserControl의 자식 컨트롤에서 이벤트 전달 - 가장 직접적인 방법?

public event RoutedEventHandler ButtonClick 
{ 
    add { _button.Click += value; } 
    remove { _button.Click -= value; } 
} 

이 방법은 작동하지 않습니다. ButtonClick에 대한 핸들러를 클라이언트 코드에 추가했지만 버튼을 클릭해도 거기에 호출되지 않습니다.

저는 아직 WPF에 익숙하지 않아서 간단하지 않을 수도 있습니다.

답변

0

버튼 클릭 이벤트는 라우트 된 이벤트이므로 응용 프로그램의 시각적 트리를 위아래로 이동한다는 것을 의미합니다. 즉, 버튼의 부모가이 이벤트를 처리 할 수 ​​있습니다. 따라서이를 지원하기 위해 자체 논리를 추가 할 필요가 없습니다. 즉, 코드가 중복됩니다! 당신은 RoutedEvent를 등록해야

http://msdn.microsoft.com/en-us/library/ms742806.aspx#event_handing

콜린 E.

+0

그러나 그렇다면 모든 부모가 (기본적으로)이 내부 정보에 액세스 할 수 있다는 것이 이상하지 않습니까? 또한 UserControl은 다른 어셈블리에 있습니다. 물론, 이것이 작동한다면 그것은 어쨌든 내 문제를 해결할 것입니다. 감사. –

+0

UserControl에 대해 이야기하고 있기 때문에 그냥 작동하지 않습니다. 투표 해? (왜냐하면 내가 할 수 없기 때문이다.) –

3

을 :

는이 라우트 된 이벤트에 대한 핸들러를 등록하는 방법은 다음을 참조하십시오

public static readonly RoutedEvent ButtonClickEvent = EventManager.RegisterRoutedEvent(
    "ButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyUserControl)); 

을 .. 이 속성을 사용하여 새로 등록 된 이벤트 처리기를 관리합니다.

버튼의 클릭 이벤트가 트리거 될 때
public event RoutedEventHandler ButtonClick 
    { 
     add { AddHandler(ButtonClickEvent , value); } 
     remove { RemoveHandler(ButtonClickEvent , value); } 
    } 

그리고 분명히 당신은 라우트 된 이벤트를 제기해야합니다 :

void button_Click(object sender, EventArgs e) 
{ 
    RaiseEvent(new RoutedEventArgs(ButtonClickEvent)); 
} 

그것은 단지 버튼의 기본 이벤트 처리기에 직접 배선에서 몇 단계를,하지만 끔찍한 없습니다.

+0

이것은 가능한 한 직접적인 것이 아니다. –

관련 문제