2010-04-13 9 views
1

내 프로젝트의 모든 ListView.GridViewColumnHeader에 대해 하나의 전역 GridViewColumnHeader.Click 핸들러를 정의하려면 어떻게해야합니까?글로벌 이벤트 핸들러

즉, TargetType = GridViewColumnHeader에 대한 app.xaml에서 스타일 또는 템플릿을 설정하여 프로젝트의 모든 목록보기에서 모든 columnheader가 app.xaml.cs의 메소드에 응답하게 할 수 있습니까?

답변

1

예, 하나의주의 사항 : 모든 GridViewColumnHeaders에 적용되는 스타일을 만들 수 있지만 여기에는 Click 이벤트를 설정할 수 없습니다. 이제

<Application.Resources> 
    <Style TargetType="GridViewColumnHeader"> 
    <Setter Property="Command" 
      Value="{x:Static local:GridViewClickHandler.ClickCommand}" /> 
    </Style> 
    ... 

가 단지 그것을 처리하는 코드를 작성 명령 클래스 처리기를 등록하고 쓸 필요합니다 :

public GridViewClickHandler 
{ 
    public RoutedCommand ClickCommand; 

    static GridViewClickHandler() 
    { 
    ClickCommand = new RoutedCommand("ClickCommand", typeof(GridViewClickHandler)); 
    CommandManager.RegisterClassCommandBinding(
     typeof(GridViewColumnHeader), 
     new CommandBinding(ClickCommand, OnColumnHeaderClick)); 
    } 

    static void OnColumnHeaderClick(object sender, ExecutedRoutedEventArgs e) 
    { 
    // your code here 
    } 
} 
당신은 거의 정확히 같은 결과가 명령 속성을 설정할 수 있습니다 그러나

응용 프로그램의 다른 곳에서 GridViewColumnHeader의 Command 속성을 수동으로 설정하면 스타일보다 우선 적용됩니다. 이것이 우려되는 경우, 대신에 Window에서 터널링 PreviewMouseDown 이벤트를 잡아 원본 소스가 GridViewColumnHeader인지 확인하십시오.

2

비록 전역 이벤트 핸들러가 아니지만, ListView에서 상속받은 새로운 컨트롤을 만들고 클릭 핸들러를 구현하기 만하면됩니다.