我有一个[silverlight] WizardContainer控件,它托管了许多向导页面。该向导非常适合其主机表单。如果页面内容较窄,则不会展开以填充容器。所以我将HorizontalContentAlignment
设置为Stretch
。这有效。
但是,如果向导页面包含一个包含大量列的数据网格,它会拉伸页面而不是自动滚动自身 - 因为它的宽度不固定。如果以下XAML位于宽度为350的usercontrol上,我希望网格为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中的所有内容都可以正常工作。但是当用户调整包含向导容器的表单时,我希望网格扩展。
答案 0 :(得分:1)
您将DataGrid包装在ScrollViewer中。这实际上告诉DataGrid它具有无限的可用宽度。由于DataGrid没有受到约束,因此它需要的宽度与列所需的宽度相同。
如果符合您的设计,您可以设置HorizontalScrollBarVisibility="Disabled"
(即您只需要从ScrollViewer垂直滚动)。这将禁用水平滚动,并将DataGrid限制在水平轴上。
DataGrid在其ControlTmplate中有一个ScrollViewer。作为一个广泛的一般规则:尝试避免ScrollViewer-in-a-ScrollViewer情况。它(几乎)总是很难调试,最终你必须将某些东西设置为固定大小(或者动态计算大小)。