gpt4 book ai didi

c# - 设置不可调整大小的 GridViewColumn

转载 作者:行者123 更新时间:2023-11-30 16:47:47 26 4
gpt4 key购买 nike

我在我的 C# WPF 应用程序中使用带有 GridViewColumn 的 ListView。

对于某些列,我使用了可见性管理器 (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
}
}
}

是否可以通过编程方式从列中删除抓取器?

One is to restyle GridViewColumnHeader to remove the gripper inside its 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];
}
}
}
}

关于c# - 设置不可调整大小的 GridViewColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39013246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com