在我绑定到viewmodel的datatemplate中,我有一个像这样的网格:
<Grid>
.
. <!--Row & Col Definitions...-->
.
<TextBlock Text="Some Label" Style="{DynamicResource TextBlockLabelStyle}" />
<TextBlock Grid.Column="1" Text="{Binding SomeValue, Mode=OneWay}"/>
<Border Style="{DynamicResource SeparatorStyle}" />
<TextBlock Grid.Row="1" Text="Some Label" Style="{DynamicResource TextBlockLabelStyle}" />
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding SomeValue, Mode=OneWay}"/>
<Border Grid.Row="1" Style="{DynamicResource SeparatorStyle}" />
<TextBlock Grid.Row="2" Text="Some Label" Style="{DynamicResource TextBlockLabelStyle}" />
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding SomeValue, Mode=OneWay}"/>
<Border Grid.Row="2" Style="{DynamicResource SeparatorStyle}" />
</Grid>
我认为添加这个重复的模式(TextBlock用于标签,TextBlock用于值,水平规则)变得乏味,并且认为最好将其封装到UserControl中,例如'GridRow',例如:
<UserControl x:Class="GridRow">
<TextBlock Text="{Binding LabelText}" Style="{DynamicResource TextBlockLabelStyle}" />
<TextBlock Grid.Column="1" Text="{Binding ValueText, Mode=OneWay}"/>
<Border Style="{DynamicResource SeparatorStyle}" />
</UserControl>
然后我可以这样做:
<Grid>
<GridRow LabelText="Some Label" ValueText="{Binding SomeValue}"/>
<GridRow Grid.Row="1" LabelText="Some Label2" ValueText="{Binding SomeValue2}"/>
<GridRow Grid.Row="2" LabelText="Some Label3" ValueText="{Binding SomeValue3}"/>
</Grid>
并让用户控件绑定到LabelText和ValueText属性,可能通过模板绑定?
我的问题是如何执行此操作,如果这是正确的方法,或者是否可以使用样式或数据模板来执行此操作?
答案 0 :(得分:0)
不幸的是,这是不容易实现的。 Grid布局查看其直接子项的Grid.Row和Grid.Column属性,以便创建所需的布局。因此,将UI控件嵌套在另一个Grid中会破坏布局。
一些选项,这篇博客文章解决了这个问题,但很复杂:
http://www.scottlogic.co.uk/blog/colin/2010/11/using-a-grid-as-the-panel-for-an-itemscontrol/
这里有一个不错的自动网格,我没有使用它,但它看起来很不错:
http://whydoidoit.com/2010/10/06/automatic-grid-layout-for-silverlight/
此致 科林E.