我有一个 [silverlight] WizardContainer 控件,它托管许多向导页面。 该向导非常适合其宿主形式。 如果页面内容较窄,则它不会扩展以填充容器。所以我将
HorizontalContentAlignment
设置为 Stretch
。 这有效。
但是,如果向导页面包含一个包含很多列的数据网格,它会拉伸页面而不是自动滚动 - 因为它的宽度不固定。 如果以下 XAML 位于宽度为 350 的用户控件上,我希望网格为 350 并且有自己的滚动条。 如果 WizardContainer 小于页面
minwidth
,则 MainScroller
应该发挥作用。
<Grid x:Name="LayoutRoot" >
<ScrollViewer x:Name="MainScroller"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto" >
<ContentControl Margin="4" x:Name="WizardContainer"
HorizontalContentAlignment="Stretch">
<Grid Background="Red" x:Name="WizardPage" MinWidth="300">
<sdk:DataGrid HorizontalAlignment="Left" Height="120" >
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Width="150"/>
<sdk:DataGridTextColumn Width="150"/>
<sdk:DataGridTextColumn Width="150"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
</ContentControl>
</ScrollViewer>
</Grid>
请注意,如果我修复了数据网格的宽度,则此 XAML 中的所有内容都有效。 但我希望网格在用户调整包含向导容器的表单大小时展开。
您已将 DataGrid 封装在 ScrollViewer 中。这实际上告诉 DataGrid 它具有无限的可用宽度。由于 DataGrid 不受约束,因此它的宽度将与列所需的宽度一样多。
如果适合您的设计,您可以设置
HorizontalScrollBarVisibility="Disabled"
(即您只需要从 ScrollViewer 中垂直滚动)。这将禁用水平滚动并将 DataGrid 限制在水平轴上。
DataGrid 在其 ControlTemplate 中有一个 ScrollViewer。作为一个广泛的一般规则:尝试避免 ScrollViewer-in-a-ScrollViewer 的情况。调试(几乎)总是令人头疼,最终您必须将某些内容设置为固定大小(或动态计算大小)。