Designing forms in silverlight is a PAIN. The grid does make it easy to align stuff right or left, but when you start building more complex forms, It quickly becomes a hell.
(Think multicolumns forms, separating parts of the form in sub-usercontrol, with Localized labels so that you need the label column to be set to Auto...)
One particular problem I face is when I need to insert a new row in a form.
Is there any way to select all the controls on multiple lines and move them all 1 row down?
Right now, I have to go through every line and move them down, one by one.
How do you effectively build complex forms? I know about the DataForm control from the toolkit, but it is in "preview" quality and from what I have read, it is too inflexible when you need to customize and build multiple-columns forms.
Yes, complex Grid's can be annoying to change. Here are a few thoughts and ideas for you.
If you use Expression Blend and insert the Row or Column using the Blue Bars in the Artboard, Blend will attempt to do this for you. It works with varying degrees of success, largely based on the amount of the control the new row or column snap lines overlaps. For the best results, zoom into the Artboard and add the new snap line very close to the row above or column to the left.
At this point you'll still have a lot of cleanup to do, but the Grid.Row and Grid.Column properties will be correctly adjusted. Correcting the row and column sizes is one of the few times I choose to manually edit the XAML, so you'll probably be faster fixing those values manually.
If odd Margins are created (as they often are) you can select all the affected properties at once and reset the Margins en masse.
Probably the best advice would be to consider using a different control. If you find yourself constantly rearranging the contents of a Grid, perhaps you would be better off with a DockPanel. You can achieve a Grid-like result by adding elements (Grids) docked to the Top and binding the row or column height's to a Resource:
<UserControl.Resources>
<GridLength x:Key="StandardColumnHeight">32</GridLength>
</UserControl.Resources>
Now you can bind the ColumnDefinition Width to the static resource ensuring they all have the same width (of course this could also work with column widths).
<ColumnDefinition Width="{StaticResource StandardColumnHeight}"/>
If you define each of the subsequent Grid's using the same set of ColumnDefinitions (another quick XAML copy-n-paste job).
This may be a little extra work to set up initially, but inserting a new row in your DockPanel is a simple matter of XAML order and would not require as much work.