添付の動作を使用して、列のヘッダーをクリックしてListViewを並べ替える機能を追加しています。この動作により、ユーザーがGridViewColumnHeaderをクリックするのを処理する次のハンドラーが追加されます。
listView.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ColumnHeader_Click));
ハンドラーは次のようになります。
static void ColumnHeader_Click(object sender, RoutedEventArgs e)
{
var listView = sender as ListView;
var header = e.OriginalSource as GridViewColumnHeader;
var gridView = ((GridView)(listView.View));
...
}
ListViewにスクロールバーがあり、スクロールバーの「シャフト」またはスクロール矢印をクリックした場合(親指ではありません!):
(ソース:microsoft.com)
次に、GridViewColumnHeader.ClickEventがトリガーされ、「header」がnullになっているため、コードが失敗します。明らかに、これは予期された動作ではありません。ここで、OriginalSourceがGridViewColumnHeaderであることを確認する必要があります。
なぜこれが起こるのですか?