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