[英]How do I get the GridViewColumn Header index in the GridViewColumnHeader.Click event?
[英]How do I get a click event from a GridViewColumn header?
我可以從標題下的所有內容獲取事件,但無法通過單擊標題獲取事件。 這是 XAML; 請注意該事件是針對整個 ListView 的,因此它應該在單擊任何內容時激活:
<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 上的代碼都不起作用。
這就是 WPF UI 事件默認的工作方式。 他們冒泡。 如果有人在此過程中吃掉了消息(按鈕類型控件就是這樣做的),則更高級別的控件將不會得到它。 您可以使用事件的預覽版本,也可以使用更簡潔的方式來執行此操作:
AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(ListView_OnColumnClick));
即使有點晚,但在 XAML 中,您可以執行以下操作:
<!-- ListView -->
<GridView AllowsColumnReorder="True">
<GridViewColumn Width="220">
<GridViewColumnHeader Content="{DynamicResource ResourceKey=explorer_column_name}" Command="{Binding Path=ISortBy}" CommandParameter="{x:Static enu:SortType.Name}"/>
<GridViewColumn.CellTemplate>
//...
</GridViewColumn.CellTemplate>
</GridViewColumn>
//..
</GridView>
AddHandler 應該在 ListView 上調用,例如:
myListView.AddHandler(GridViewColumnHeader.ClickEvent, new RoutedEventHandler(myListView_OnColumnClick));
然后可以將 e.OriginalSource 轉換為 myListView_OnColumnClick 中的 GridViewColumnHeader,您可以識別您的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.