如何在表达式混合中向下移动所有选定元素n行?

时间:2011-03-24 09:09:48

标签: forms silverlight-4.0 expression-blend

在silverlight中设计表单是一种PAIN。 网格确实可以很容易地左右对齐,但是当你开始构建更复杂的表格时,它很快变成了一个地狱。

(考虑多列表单,在子用户控件中分离表单的部分,使用本地化标签,以便您需要将标签列设置为自动...)

我遇到的一个特殊问题是当我需要在表单中插入新行时。

  

有没有办法选择所有   控制多行并移动   他们全部下来一排?

现在,我必须逐行浏览并逐一移动它们。

您如何有效地构建复杂的表单?我从工具包中了解了DataForm控件,但它具有“预览”质量,而且根据我的阅读,当您需要自定义和构建多列表单时,它太不灵活了。

1 个答案:

答案 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顺序的一个简单问题,并且不需要那么多的工作。