我有两个用户控件垂直排列在网格中,两者都可以扩展到比网格可以容纳的更高。我把它们放在一个功能正常的 scrollviewer 中。我想要的是给他们空间与他们在运行时想要的数量成比例。
因此,如果有500个高度可用,则上部控件需要400而下部600,上部控件将获得200,底部控件将获得200和底部300.
我不知道在设计时每个人想要多少空间与另一个相比,所以使用1 *,2 *等行高不适合我。
我可以手动编写运行时比例大小调整,但是我错过了XAML中的一个简单技巧,可以让我得到我想要的东西吗?
上下文如下(为简洁而修剪)......
<Grid>
<TabControl>
<TabItem>
<Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="Title Area" />
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<UserControl />
</ScrollViewer>
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<UserControl />
</ScrollViewer>
</Grid>
</Grid>
</TabItem>
</TabControl>
</Grid>
答案 0 :(得分:1)
我会认为在XAML中没有简单的方法,所以我有使用代码隐藏。因此,我在XAML中完成它的方式;
<Grid>
<TabControl>
<TabItem>
<Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Name="FooRow" Height="*"/>
<RowDefinition Name="BarRow" Height="*"/>
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Header="Title Area" />
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<UserControl Name="Foo" SizeChanged="Foo_SizeChanged" />
</ScrollViewer>
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto">
<UserControl Name="Bar" SizeChanged="Bar_SizeChanged" />
</ScrollViewer>
</Grid>
</Grid>
</TabItem>
</TabControl>
</Grid>
在代码隐藏中;
private void Foo_SizeChanged(object sender, SizeChangedEventArgs e)
{
FooRow.Height = new GridLength(e.NewSize.Height, GridUnitType.Star);
}
private void Bar_SizeChanged(object sender, SizeChangedEventArgs e)
{
BarRow.Height = new GridLength(e.NewSize.Height, GridUnitType.Star);
}
您也可以使用绑定和ValueConverter。