2015-07-20 73 views
1

我可以從標題下的所有內容中獲取事件,但無法通過單擊標題獲取事件。這是XAML;注意事件是整個的ListView,所以點擊什麼時候就應該激活:如何從GridViewColumn標頭獲取單擊事件?

<ListView x:Name="myListView" MouseLeftButtonUp="myListView_MouseLeftButtonUp" Margin="10"> 
    <ListView.View> 
     <GridView> 
      <GridView.Columns> 
       <GridViewColumn Header="File Path" 
           DisplayMemberBinding="{Binding Path=Path}" /> 
       <GridViewColumn Header="File Size" 
           DisplayMemberBinding="{Binding Path=Size}" /> 
      </GridView.Columns> 
     </GridView> 
    </ListView.View> 
</ListView> 

而且事件本身是很簡單的。只是告訴我,事情發生:

private void myListView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     string output = sender.ToString(); 
     MessageBox.Show(output); 
    } 

標題下的任何地方點擊響應完美:
「System.Windows.Controls.ListView Items.Count:0」

點擊「文件路徑」頭什麼也沒做。點擊「文件大小」標題什麼也不做。

MSDN說:
https://msdn.microsoft.com/en-us/library/vstudio/ms745786(v=vs.100).aspx

<ListView x:Name='lv' Height="150" HorizontalAlignment="Center" VerticalAlignment="Center" 
GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler"> 

Visual Studio中說,有作爲GridViewColumnHeader沒有這樣的事情,所以沒有MSDN上的代碼的工作。

+0

什麼是你的框架版本? – BartoszKP

+0

4.5,這是Visual Studio Express 2013的默認設置 –

+0

您引用的示例似乎僅對.NET 4有效。 – BartoszKP

回答

1

這就是默認情況下WPF UI事件的工作方式。他們泡了起來。如果有人沿途吃東西(這是按鈕類型控制的做法),那麼更高級別的控件就不會得到它。您可以使用事件的預覽版本,或清潔的方式做到這一點:

AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ListView_OnColumnClick)); 
+0

這似乎是向正確方向邁出的一步,但我無法檢測到哪個標頭,已點擊。

使用事件的預覽版本說以下內容:
「System.Windows.Controls.ListView Items.Count:0」

程序崩潰,如果我試圖迫使它是一個GridViewColumnHeader或GridViewColumn :
private void ListView_PreviewMouseLeftButtonUp(object sender,MouseButtonEventArgs e) { string output =(sender as GridViewColumnHeader).ToString(); MessageBox.Show(output); } crash:System.NullReferenceException –

+0

您的AddHandler事件將sender.ToString()標識爲「TestApplication.MainWindow」,所以我不確定如何從那裏檢查標題。試圖將其轉換爲GridViewColumnHeader或GridViewColumn導致相同的崩潰類型System.NullReferenceException –

+0

您可以在以下位置獲取它:GridViewColumnHeader columnClicked = e.OriginalSource as GridViewColumnHeader; (使用AddHandler方法)。 – SledgeHammer