2014-07-10 4 views
0

저는 현재 Xaml이 실제로 어떻게 작동하는지 이해하려고합니다. 다음과 같이 XAML은 같습니다Xaml-AttachedAttribute는 하위 노드에서 어떻게 작동합니까?

<ListView ItemsSource="{Binding Source={StaticResource SortedEvents}}" 
      GridViewColumnHeader.Click="SortableListViewColumnHeaderClicked"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="A" DisplayMemberBinding="{Binding ...}" 
          Width="80"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

내 질문은 attached property "GridViewColumnHeader.Click"(두 번째 줄)에 관한 것입니다. 어떻게 든 그것은 열에 의해 암시 적으로 정의 된 모든 GridViewColumnHeaders에 적용됩니다. 나는이 기능을 코드에서 다시 구현하려고 시도했지만 VisualTree를 탐색 할 때 GridViewColumnHeaders에 대한 액세스 권한이 없기 때문에 실패했습니다 ...

누군가 구현할 수있는 방법에 대한 포인터를 제공 할 수 있습니까? 도움이 될 것입니다.


짧은 답변 : 그것은 attached attributes하지만 attached events 아니다. 그리고 갑자기 나는 무슨 일이 일어나고 있는지 이해할 수있는 올바른 튜토리얼을 찾았습니다! 나는 사람들은

listView.AddHandler(ButtonBase.ClickEvent, new RoutedEventHandler(SortableListViewColumnHeaderClicked)); 

답변

3

와 연결된 속성하지만 routed events을 동일하지 않습니다 할 뒤에 코드에서

:

기능 정의 : 라우트 된 이벤트 핸들러를에 호출 할 수있는 이벤트의 유형입니다 이벤트를 발생시킨 객체가 아닌 요소 트리의 여러 리스너

구현 정의 : 라우트 된 이벤트는 RoutedEvent 클래스의 인스턴스에 의해 지원되며 Windows Presentation Foundation (WPF) 이벤트 시스템에서 처리되는 CLR 이벤트입니다.

특히 attached events입니다.

XAML 언어는 연결된 이벤트라는 특수한 유형의 이벤트도 정의합니다. 연결된 이벤트를 사용하면 특정 이벤트에 대한 핸들러를 임의의 요소에 추가 할 수 있습니다. 이벤트를 처리하는 요소는 첨부 된 이벤트를 정의하거나 상속 할 필요가 없으며 잠재적으로 이벤트를 발생시키는 대상도 대상 처리 인스턴스도 해당 이벤트를 클래스 멤버로 정의하거나 "소유"하지 않아야합니다.

WPF 입력 시스템은 연결된 이벤트를 광범위하게 사용합니다. 그러나 이러한 모든 연결된 이벤트는 기본 요소를 통해 전달됩니다. 입력 이벤트는 기본 요소 클래스의 멤버 인 동등한 연결되지 않은 라우트 된 이벤트로 나타납니다. 예를 들어 기본 연결된 이벤트 Mouse.MouseDown은 XAML 또는 코드에서 연결된 이벤트 구문을 처리하는 대신 해당 UIElement에서 MouseDown을 사용하여 지정된 UIElement에서보다 쉽게 ​​처리 할 수 ​​있습니다.


당신이 ListViewAddHandler를 호출 코드에서 같은 논리를 실행하고 ClickEvent 필드를 전달합니다.

+0

올바른 포인터였습니다. 시간 낭비로 시간을 절약 해 주셔서 감사합니다! –