阻止wpf listview标题双击自动调整列大小

阻止wpf listview标题双击自动调整列大小,wpf,gridview,listview,Wpf,Gridview,Listview,我有一个listview,其中我对列标题进行了模板化,listview项也进行了模板化。但是,对于网格视图中的某些行,我有不同的template。当用户双击列表视图列标题(您可以在其中拖动列的宽度)时,列标题将自动调整大小,这意味着它将增大其大小。这给我带来了一个问题,因为我的列标题宽度不再与行模板中的列宽度同步 有没有一种简单快捷的方法可以防止在列标题上出现这种双击行为 是,在列表视图本身上设置双击处理程序。然后在处理程序中,使用如下代码: private void ListView_Mous

我有一个listview,其中我对列标题进行了模板化,listview项也进行了模板化。但是,对于网格视图中的某些行,我有不同的template。当用户双击列表视图列标题(您可以在其中拖动列的宽度)时,列标题将自动调整大小,这意味着它将增大其大小。这给我带来了一个问题,因为我的列标题宽度不再与行模板中的列宽度同步


有没有一种简单快捷的方法可以防止在列标题上出现这种双击行为

是,在
列表视图
本身上设置双击处理程序。然后在处理程序中,使用如下代码:

private void ListView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    if (TryFindParent<GridViewColumnHeader>(e.OriginalSource as DependencyObject) != null)
        e.Handled = true;
}

在深入研究GridViewColumnHeader源代码后,我找到了可行的解决方案。 我的带列ListView的XAML是:

                            <ListView.View>
                                <GridView AllowsColumnReorder="False" x:Name="ListGridView">
                                    <GridView.Columns>

                                        <GridViewColumn x:Name="ExpandHeader"
                                                        Width="40">
                                            <GridViewColumn.Header>
                                                <GridViewColumnHeader IsHitTestVisible="False" />
                                            </GridViewColumn.Header>
                                        </GridViewColumn>

奇怪。。在我的例子中,向上投票并接受答案,但设置
e.Handled=true
并不能阻止列自动调整大小。我已经创建了一个新的wpf解决方案来测试这一点。不起作用。
                            <ListView.View>
                                <GridView AllowsColumnReorder="False" x:Name="ListGridView">
                                    <GridView.Columns>

                                        <GridViewColumn x:Name="ExpandHeader"
                                                        Width="40">
                                            <GridViewColumn.Header>
                                                <GridViewColumnHeader IsHitTestVisible="False" />
                                            </GridViewColumn.Header>
                                        </GridViewColumn>
    private void ViewOnLoaded(object sender, RoutedEventArgs e)
    {
        var fields = typeof(GridViewColumnHeader).GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
        var thumbFieldInfo = fields.FirstOrDefault(fi => fi.FieldType == typeof(Thumb));
        var methods = typeof(GridViewColumnHeader).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);
        var eventHandlerMethodInfo = methods.FirstOrDefault(mi => mi.Name == "OnGripperDoubleClicked");

        if (thumbFieldInfo != null && eventHandlerMethodInfo != null)
        {
            foreach (var column in ListGridView.Columns)
            {
                var header = column.Header as GridViewColumnHeader;
                if (header != null)
                {
                    var headerGripper = thumbFieldInfo.GetValue(header) as Thumb;
                    if (headerGripper != null)
                    {
                        var handler = Delegate.CreateDelegate(typeof(MouseButtonEventHandler), header, eventHandlerMethodInfo);
                        headerGripper.RemoveHandler(Control.MouseDoubleClickEvent, handler);
                    }
                }
            }
        }
    }