Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在代码中设置列宽的Wpf网格拆分器_C#_Wpf - Fatal编程技术网

C# 在代码中设置列宽的Wpf网格拆分器

C# 在代码中设置列宽的Wpf网格拆分器,c#,wpf,C#,Wpf,我有一个网格控件 网格有三列,它们可以处于以下状态之一 仅显示A列 显示A列和B列 显示A、B和C列 这是仅有的三种可能的状态 我可以使用以下命令关闭列: private void CloseColumnB() { ColumnB.Width = new GridLength(0); } 我可以使用以下命令打开一列: private void OpenColumnB() { ColumnB.Width = new GridLength(1, GridUnitType.Star)

我有一个网格控件

网格有三列,它们可以处于以下状态之一

仅显示A列 显示A列和B列 显示A、B和C列 这是仅有的三种可能的状态

我可以使用以下命令关闭列:

private void CloseColumnB()
{
    ColumnB.Width = new GridLength(0);
}
我可以使用以下命令打开一列:

private void OpenColumnB()
{
    ColumnB.Width = new GridLength(1, GridUnitType.Star);
}
如果只有一列打开,它必须占用所有可用空间。 如果两列是开放的,它们必须占据一半的空间 如果有三根柱子是开着的,那么每根柱子必须占据三分之一的空间。 这很好用,只是现在需要使用网格拆分器,以便用户可以在必要时调整列的大小。所以我使用了XAML:

<GridSplitter Grid.Column="0" HorizontalAlignment="Right" Width="3" Background="White"/>
<GridSplitter Grid.Column="1" HorizontalAlignment="Right" Width="3" Background="White"/>
这使我能够成功地调整控件的大小

然而

当我调整网格大小,然后关闭其中一列并尝试重新打开它时,第二列和第三列被挤压到网格的最右侧,这意味着唯一可见的列是A列,B列和C列仅通过网格拆分器所在最右侧的白线可见

如果我根本不调整大小,则列的打开和关闭效果与预期一样。 如果我稍微调整一下大小,ColumnA似乎会占用所有可用空间。 我希望用户能够调整列的大小,但当打开一列时,它们会重置为默认大小,即每列2列=一半


我希望这是有意义的,如果有人能提供帮助,我将不胜感激。

如果您使用“打开”和“关闭”列,在这种情况下,它来自多个位置,columnA中有一个列表视图,当选择更改时会打开columnB,有一个按钮可以打开C列,a列和B列都有关闭按钮作为其内容的一部分,关闭各自的列您应该在每次更改时更改网格拆分器的列索引您可以详细说明您的想法吗?