簡體   English   中英

如何從 GridViewColumn 標題獲取點擊事件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM