我在C#WPF应用程序中将ListView与GridViewColumn一起使用。
对于某些列,我使用了可见性管理器(此工具)。但是,当第1列和第3列可见而第2列不可见时,如果光标太右,则调整第1列的大小会使第2列出现。
如果IsVisible为false,是否可以在列上禁用调整大小(和取消激活光标)?
我看到了该文章,但无法在上使用它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的样式,以删除其Template内部的抓手
终于找到了解决方案:
在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];
}
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句