내 프로젝트의 모든 ListView.GridViewColumnHeader에 대해 하나의 전역 GridViewColumnHeader.Click 핸들러를 정의하려면 어떻게해야합니까?글로벌 이벤트 핸들러
즉, TargetType = GridViewColumnHeader에 대한 app.xaml에서 스타일 또는 템플릿을 설정하여 프로젝트의 모든 목록보기에서 모든 columnheader가 app.xaml.cs의 메소드에 응답하게 할 수 있습니까?
내 프로젝트의 모든 ListView.GridViewColumnHeader에 대해 하나의 전역 GridViewColumnHeader.Click 핸들러를 정의하려면 어떻게해야합니까?글로벌 이벤트 핸들러
즉, TargetType = GridViewColumnHeader에 대한 app.xaml에서 스타일 또는 템플릿을 설정하여 프로젝트의 모든 목록보기에서 모든 columnheader가 app.xaml.cs의 메소드에 응답하게 할 수 있습니까?
예, 하나의주의 사항 : 모든 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인지 확인하십시오.
비록 전역 이벤트 핸들러가 아니지만, ListView에서 상속받은 새로운 컨트롤을 만들고 클릭 핸들러를 구현하기 만하면됩니다.