【发布时间】:2017-10-12 08:47:57
【问题描述】:
我正在使用 Rachel Lim 的 GridHelper 来获取动态行数。我想要实现的是让每一行显示在另一行下方(完成),能够调整它们的大小(完成 - 使用 GridSplitter)并根据屏幕大小按比例调整内容大小。
结果:
Xaml:
<Grid>
<ItemsControl ItemsSource="{Binding RowSource}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid local:GridHelper.RowCount="{Binding RowCount}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Grid.Row" Value="{Binding RowNumber}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Col 1" />
<DataGridTextColumn Header="Col 2" />
<DataGridTextColumn Header="Col 3" />
</DataGrid.Columns>
</DataGrid>
<Button Grid.Column="1" Content="Btn" />
</Grid>
<GridSplitter Height="5" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Grid.Row="0" ResizeDirection="Rows" ResizeBehavior="CurrentAndNext"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
视图模型:
internal class MyViewModel
{
public ObservableCollection<RowInfo> RowSource { get; set; }
public int RowCount { get { return RowSource.Count; } }
public MyViewModel()
{
RowSource = new ObservableCollection<RowInfo>()
{
new RowInfo() { RowNumber = 0 },
new RowInfo() { RowNumber = 1 },
new RowInfo() { RowNumber = 2 }
};
}
}
行信息:
public class RowInfo
{
public int RowNumber { get; internal set; }
}
【问题讨论】:
-
我不确定我是否能很好地解决这个问题,您想要的是,即使其中没有内容,默认情况下行也应该有一定的高度。这就是需要吗?
-
是的,我希望行的大小与窗口大小成比例。 @mm8 得到了正确的部分,但调整大小(使用 GridSplitter)停止正常工作。
-
哦,基本上,您希望内容分布在整个视图中,当我调整窗口大小时,您还想缩放行和列?
-
没错。但我也想使用 GridSplitter 单独调整每一行的大小。
-
嗯,我明白了。我会试着写一个控件。