【发布时间】:2015-03-30 20:39:31
【问题描述】:
我正在尝试布局几个控件:
浅灰色垂直线是网格分割线。此表中的每一行都是一个三列的网格,左侧是标签,中间是拆分器,右侧是控件,包括文本框和图像。
我希望所有列都对齐。这是我用于每一行的数据模板:
<DataTemplate x:Key="PropertyLineTemplate">
<Grid Margin="0,0,0,1">
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="Name"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition SharedSizeGroup="Value"/>
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
VerticalAlignment="Center"
Text="{Binding Title}" />
<GridSplitter Grid.Column="1" Width="2"/>
<SomeUserControl
Grid.Column="2"
Content="{Binding}"
Margin="4, 0, 0, 0"/>
</Grid>
</DataTemplate>
以及视图本身的模板:
<DataTemplate DataType="{x:Type vm:PropertiesViewModel}">
<DockPanel>
<!-- Properties -->
<ScrollViewer>
<StackPanel Margin="10">
<ItemsControl ItemsSource="{Binding Properties}"
ItemTemplate="{StaticResource PropertyLineTemplate}" />
</StackPanel>
</ScrollViewer>
</DockPanel>
</DataTemplate>
以及两者的用法:
<ContentControl Content="{Binding SelectedItem}" Grid.IsSharedSizeScope="True">
</ContentControl>
其中SelectedItem 的类型为PropertiesViewModel。
我还尝试将Grid.IsSharedSizeScope="True" 直接放置在每个单独的网格中以及包含控件的面板上,没有效果。如何实现所有列共享宽度?
【问题讨论】:
-
为什么不直接使用 ListView GridView 并让他们拖动标题来调整列的大小?