我正在使用附加行为来添加通过单击列标题对 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' 现在为空。显然这不是预期的行为,现在我必须确保 OriginalSource 是 GridViewColumnHeader。
为什么会这样?