2016-08-18 13 views
1

私は、C#WPFアプリケーションでGridViewColumnでListViewを使用しています。サイズ変更不可能なGridViewColumnを設定する

一部の列では、Visibility Manager(this one)を使用しています。しかし、列1と3が表示され、列2が表示されていない場合、列1のサイズを変更すると、カーソルがあまりにも右の場合に列2が表示されます。

IsVisibleがfalseの場合、列のサイズ変更(および非アクティブカーソル)を無効にすることはできますか?

私は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 
     } 
    } 
} 

それは、プログラムの列からグリッパーを削除することは可能ですか? App.xamlで

:GridViewColumnVisibilityManager.csで

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

一つは 内部そのテンプレート

答えて

1

最後に解決策を見つけたグリッパを除去するGridViewColumnHeaderのスタイルを変更することです:

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]; 
      } 
     } 
    } 
} 
関連する問題