2012-05-03 8 views
1

添付のビヘイビアを使用して、列のヘッダーをクリックしてListViewを並べ替える機能を追加しています。動作はGridViewColumnHeader上でユーザがクリックを処理するために、次のハンドラを追加します。GridViewColumnHeader.Click ListViewのスクロールバーの軸とスクロール矢印をクリックしてトリガーする

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コントロールがスクロールバーを持っている場合ことに気づいて、I (ただし、親指を!)スクロールバーの「シャフト」をクリックするか、矢印をスクロールします。その後、

Anatomy of a Scroll Bar http://i.msdn.microsoft.com/dynimg/IC79322.gif

GridViewColumnHeader.CをlickEventがトリガーされ、 'header'がnullになったためコードが失敗します。明らかに、これは予想される動作ではなく、今ではOriginalSourceがGridViewColumnHeaderであることを確認する必要があります。

どうしてですか?

答えて

1

問題があり、GridViewColumnHeader.ClickEventは実際にあなたが設定ハンドラはどのユーザーがボタンをクリックするとトリガされることを意味し、ButtonBase.ClickEventである(または派生:チェックボックス、日付ピッカー、スクロールバーボタンなど)をリストビューでは、 (ボタンから派生した)列見出しだけでなく、

は、私が見つけた唯一の解決策は、それをトリガーボタン(e.OriginalSource)が列ヘッダーではなかったときのハンドラを終了するには、何かを行う前にheader != nullいることを確認することですhttp://social.msdn.microsoft.com/Forums/en/wpf/thread/3595d153-4faa-4501-9c6f-2f074658e760

を参照してください。

希望これはPS(...

に役立ちます:header.Column != null場合も時に「最後の余分なヘッダ」をユーザーがクリックする、すべての「通常の」の右側に空のヘッダエラーを回避するために、チェックヘッダー...)

+0

PSのおかげで、私は気づいていなかったし、私たちのコードに問題があった。 –