设置不可调整大小的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];
}
}
}
}