WPF Grid:如果我需要插入新行,是不是有一种简单的方法可以重新调整行项目?

Posted

技术标签:

【中文标题】WPF Grid:如果我需要插入新行,是不是有一种简单的方法可以重新调整行项目?【英文标题】:WPF Grid: Is there an easy way to readjust the row items if I need to insert new rows?WPF Grid:如果我需要插入新行,是否有一种简单的方法可以重新调整行项目? 【发布时间】:2011-08-28 21:47:52 【问题描述】:

网格行和列的定义似乎是这样硬编码的:

Grid.Row="3" Grid.Column="1"

我正在开发一个新的 WPF 应用程序,我不得不不断地在我的网格中添加和删除新行,因为客户决定了表单的外观。我发现这是一项相当乏味的任务。如果在顶部附近插入一行,我必须手动更改我刚刚插入的行下方的 XAML 中的所有行索引。

有自动调整所有行的简单方法吗?

【问题讨论】:

如果在 2010 年,您使用设计器添加或删除行/列,它将为您调整所有内容。右键单击您想要新行选择行的位置,然后插入。这是设计师可以轻松做好的少数几件事之一。 【参考方案1】:

在 Visual Studio 2015 中,您还可以将鼠标悬停在行的边缘,然后会出现一个小下拉框。当您单击向下箭头时,其中两个选项是“前移行”和“后移行”。这是我找到的最好方法。

示例图片:

【讨论】:

太棒了!如果您可以在答案中包含屏幕截图,将不胜感激。 这个答案是传奇,你不知道这是多么节省时间。谢谢! 这直接解决并解决了所述问题。它应该是公认的答案。 年。多年来,我一直被这个困扰。我正要写一个扩展来做到这一点。谢天谢地,我首先找到了这个答案。 非常棒的答案。感谢您节省了很多人的时间。实时节省。【参考方案2】:

Grid 是一个网格,行和列的编号是出于特定原因。这就像一张方格纸被切成固定数量的正方形。因为行数和列数是固定的,所以你可以做一些强大的事情,比如跨行和跨列。相反,对于可变数量的行或列,这灵活。

如果您需要可变数量的行,或者您在设计时不断添加行,那么Grid 可能不是最适合您的设计元素。或者更好的是,您可以将 Grid 与其他布局元素结合使用,以获得所需的灵活性。

例如,您可以将所有变量行放入单个 Grid 行,现在您的网格行数不再改变。但是,您将需要一个支持可变行数的布局元素来放入Grid 行。嗯,有很多可供选择,但有两个有用的例子是 StackPanelDockPanel

特别是布局元素DockPanel 对于可变数量的行或列非常强大,尤其是在DockPanels 或其他组合中用作DockPanels 时。处理此布局问题所需要做的就是细分和征服

这里是DockPanel的介绍:WPF Tutorial: Dock Panel

【讨论】:

我刚刚解决了这个问题,你的 stackpanel 想法很有效。我设置了一个垂直方向的堆栈面板作为我的桌子。然后,我在每一个中使用一系列水平堆栈面板作为行,每个都有两个控件、一个标签和一个文本框。为了确保标签的宽度相同,我创建了一个样式来设置它们的宽度属性。现在移动行变得轻而易举! 这并不能回答这里的实际问题 - 每当您想在网格中添加或删除行时都必须更新行索引非常烦人/乏味。即使在设计过程中只是几次,它仍然很乏味。 PatFromCanada 的评论是一个更好的答案 - 请改用设计器。【参考方案3】:

没有简单的方法可以自动调整 Grid 的行/列。

我过去使用的一个潜在替代方案是UniformGrid,因为它不需要在每个项目中引用行/列。屏蔽数据的占位符非常好。

如果您正在进行初始设计,我建议您仅使用 Visual Studio 中的拖放界面或 Balsamiq 或 Blend 等设计工具。 Balsamiq 是我最喜欢的,因为它故意看起来不像一个实际的应用程序,因此客户不会对事物的实际外观感兴趣,而是专注于数据。

【讨论】:

【参考方案4】:

我知道这是一个非常古老的问题,但万一其他人遇到它,在 Visual Studio 2013 中(也许更早我不确定)你可以将鼠标悬停在网格的边缘,它会让你分裂一排变成两排。

它将使行设置为数字高度,因此您可能需要返回并更改为“自动”或“*”或您想要使用的任何内容。它还会使原始行中的任何内容跨越两行,因此您需要删除这些项目上的 RowSpan="2" 属性并将它们放入正确的行中,但它会自动将较低行中的所有项目向下推。

这不是全自动的,需要进行一些清理,但如果您有很多行,它比手动重新编号要快。

【讨论】:

以上是关于WPF Grid:如果我需要插入新行,是不是有一种简单的方法可以重新调整行项目?的主要内容,如果未能解决你的问题,请参考以下文章

半计算列只能在插入触发器后使用?

Kendo Grid:取消编辑会删除新行

在 wpf 文本框中开始一个新行

WPF 动态插入grid 将Grid中的一个空白布局,用同样大小的一个Grid插入,怎么实现

基于多单元逻辑插入新行

AG-Grid + React - 添加新行时忽略网格排序