在silverlight中设计表单是一种PAIN。 网格确实可以很容易地左右对齐,但是当你开始构建更复杂的表格时,它很快变成了一个地狱。
(考虑多列表单,在子用户控件中分离表单的部分,使用本地化标签,以便您需要将标签列设置为自动...)
我遇到的一个特殊问题是当我需要在表单中插入新行时。
有没有办法选择所有 控制多行并移动 他们全部下来一排?
现在,我必须逐行浏览并逐一移动它们。
您如何有效地构建复杂的表单?我从工具包中了解了DataForm控件,但它具有“预览”质量,而且根据我的阅读,当您需要自定义和构建多列表单时,它太不灵活了。
答案 0 :(得分:2)
是的,复杂的网格可能会令人烦恼。以下是一些想法和想法。
如果您使用Expression Blend并使用画板中的蓝条插入行或列,Blend将尝试为您执行此操作。它的工作取得了不同程度的成功,主要取决于新行或列捕捉线重叠的控制量。为获得最佳效果,请放大画板并将新的捕捉线添加到非常靠近左上方的行或列的左侧。
此时你仍然需要做很多清理工作,但Grid.Row和Grid.Column属性将被正确调整。更正行和列大小是我选择手动编辑XAML的少数几次之一,因此您可能会更快地手动修复这些值。
如果创建奇数边距(通常是这样),您可以一次选择所有受影响的属性并重新设置边距。
可能最好的建议是考虑使用不同的控件。如果您发现自己不断重新排列Grid的内容,那么使用DockPanel可能会更好。您可以通过添加停靠在Top上的元素(网格)并将行或列高度绑定到资源来实现类似网格的结果:
<UserControl.Resources>
<GridLength x:Key="StandardColumnHeight">32</GridLength>
</UserControl.Resources>
现在您可以将ColumnDefinition Width绑定到静态资源,确保它们都具有相同的宽度(当然这也适用于列宽)。
<ColumnDefinition Width="{StaticResource StandardColumnHeight}"/>
如果使用同一组ColumnDefinitions定义每个后续网格(另一个快速XAML复制粘贴作业)。
这可能是最初设置的一些额外工作,但在DockPanel中插入新行只是XAML顺序的一个简单问题,并且不需要那么多的工作。