如何在初始化后调整 GridView 列的宽度?

Posted

技术标签:

【中文标题】如何在初始化后调整 GridView 列的宽度?【英文标题】:Howto resize the width of a GridView column after it has been initialized? 【发布时间】:2012-08-25 13:56:27 【问题描述】:

更新问题:

在 WPF 中,我使用 GridView(在 ListView 内)来显示 Textbox-Slider 对的列表。每对这样的对都恰好排列在单列的一个单元格中(每对使用DockPanel)。

滑块具有最小宽度,因此它不会折叠,文本框不会折叠,它会在接收输入时动态调整大小。

问题是当文本框的宽度增加时,列宽并没有等效地改变。这会导致相应行中的滑块在右侧被视觉剪辑。结果,滑块的旋钮在移动到右端时消失在空隙中。

所以问题是:如果内容超过可用空间(在初始化时设置),我如何强制gridview的列宽动态调整?

只需忽略文本框和滑块之间的标签(没有它,行为不会改变)。

【问题讨论】:

如果你有复杂的代码,你应该做的第一件事就是提取你的问题区域并发布一个独立的例子来展示问题。也许你甚至在这个过程中解决了问题。 这不是标准行为。这表明您的容器(网格、堆栈面板、停靠面板)设置不正确。剥离那段代码,以便我们检查。 很难提取相关的代码,因为它嵌入在一个相当复杂的程序中。 你在几台不同的机器上测试过这个吗? "很难提取相关的代码" 然后尝试通过在停靠面板中简单复制这三个控件来重现它。工作的负担应该在提问者身上,而不是回答者身上。 【参考方案1】:

一种方法是获取标签事件并将其添加到网格 (sizeChanged) 中,然后根据标签大小调整网格大小...

【讨论】:

【参考方案2】:

某些容器可能会通过ClipToBounds 对其进行剪辑,或者根据您的背景颜色的实现方式,它们可能会从另一列覆盖。

【讨论】:

解压代码到一个干净的新项目后发现不是ClipToBounds引起的。看看更新后的帖子。【参考方案3】:
Size containerSize=new Size(100, 100);
public Size CalculateSize(FrameworkElement visualBlock, Size containerSize)

    visualBlock.Measure(containerSize);
    return visualBlock.DesiredSize;

此代码获取框架元素的大小以在容器内进行渲染。之后,您可以以编程方式设置大小。 需要知道父母的大小才能正确工作。

【讨论】:

好吧,为了测量 FrameworkElement 的大小,我首先需要访问这个元素。问题是,元素(即滑块)被插入到 GridViewColumn 中。所以我必须从那里访问它们 - 有什么方法可以实现吗? 尝试使用来自***.com/questions/636383/wpf-ways-to-find-controls的示例

以上是关于如何在初始化后调整 GridView 列的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 DevExpress GridView 扩展的宽度,同时保持其列的宽度可调整大小

在GridView AutoGenerateColumns中调整列的宽度以使文本适合页面

Android GridView——如何以dp单位使用setColumnWidth()设置宽度

如何调整gridview宽度

android中gridView怎么在代码里动态设置每一列的宽度??

当 AutoGenerateColumns="true" 时动态设置 gridview 列的宽度