设置不可调整大小的GridViewColumn

设置不可调整大小的GridViewColumn

问题描述:

我是在我的C#WPF应用程序中使用带有GridViewColumn的ListView。设置不可调整大小的GridViewColumn

对于某些列,我使用了可视性管理器(this one)。但是,当列1和列3可见,列2不可见时,如果光标太右,则调整列1的大小会使第2列出现。

如果IsVisible为false,是否可以在列上禁用调整大小(和unactibe游标)?

我看到that post,但我不能在GridViewColumnVisibilityManager上使用它,我的列并不总是固定的。

GridViewColumnVisibilityManager有趣的部分:

private static void OnIsVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    GridViewColumn gc = d as GridViewColumn; 
    if (gc == null) 
     return; 

    if (GetIsVisible(gc) == false) 
    { 
     originalColumnWidths[gc] = gc.Width; 
     gc.Width = 0; 
     // Fix Size there 
    } 
    else 
    { 
     if (gc.Width == 0) 
     { 
      gc.Width = originalColumnWidths[gc]; 
      //UnFix 
     } 
    } 
} 

是否有可能以编程方式从栏中移除夹具?

一是再整GridViewColumnHeader以除去夹具内 其模板

终于找到了解决方案:

在App.xaml中:

<Style x:Key="disabledColumn" TargetType="GridViewColumnHeader"> 
    <Setter Property="IsEnabled" Value="False"/> 
</Style> 

在GridViewColumnVisibilityManager.cs :

public class GridViewColumnVisibilityManager 
{ 
    static Dictionary<GridViewColumn, double> originalColumnWidths = new Dictionary<GridViewColumn, double>(); 
    static Dictionary<GridViewColumn, Style> originalColumnHeader = new Dictionary<GridViewColumn, Style>(); 

    public static bool GetIsVisible(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(IsVisibleProperty); 
    } 

    public static void SetIsVisible(DependencyObject obj, bool value) 
    { 
     obj.SetValue(IsVisibleProperty, value); 
    } 

    public static readonly DependencyProperty IsVisibleProperty = 
      DependencyProperty.RegisterAttached("IsVisible", typeof(bool), typeof(GridViewColumnVisibilityManager), new UIPropertyMetadata(true, OnIsVisibleChanged)); 

    private static void OnIsVisibleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     GridViewColumn gc = d as GridViewColumn; 
     if (gc == null) 
      return; 

     if (GetIsVisible(gc) == false) 
     { 
      originalColumnWidths[gc] = gc.Width; 
      gc.Width = 0; 

      originalColumnHeader[gc] = gc.HeaderContainerStyle; 
      gc.HeaderContainerStyle = Application.Current.FindResource("disabledColumn") as Style; 
     } 
     else 
     { 
      if (gc.Width == 0) 
      { 
       gc.Width = originalColumnWidths[gc]; 
       gc.HeaderContainerStyle = originalColumnHeader[gc]; 
      } 
     } 
    } 
}