XAML:如何将datagrid限制为其父级宽度

XAML:如何将datagrid限制为其父级宽度,xaml,Xaml,我有一个[silverlight]WizardContainer控件,它承载许多向导页面。该向导非常适合其宿主窗体。如果页面内容狭窄,则不会展开以填充容器。因此,我将HorizontalContentAlignment设置为Stretch。这很有效 但是,如果向导页面包含具有许多列的datagrid,它会拉伸页面,而不是自动滚动页面本身,因为其宽度不是固定的。如果下面的XAML位于宽度为350的usercontrol上,我希望网格为350,并且有自己的滚动条。如果向导容器小于页面minwidth

我有一个[silverlight]WizardContainer控件,它承载许多向导页面。该向导非常适合其宿主窗体。如果页面内容狭窄,则不会展开以填充容器。因此,我将
HorizontalContentAlignment
设置为
Stretch
。这很有效

但是,如果向导页面包含具有许多列的datagrid,它会拉伸页面,而不是自动滚动页面本身,因为其宽度不是固定的。如果下面的XAML位于宽度为350的usercontrol上,我希望网格为350,并且有自己的滚动条。如果向导容器小于页面
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>


注意,如果我固定了datagrid的宽度,那么这个XAML中的所有内容都可以工作。但是我希望网格随着用户调整包含向导容器的表单的大小而扩展。

您将数据网格包装在ScrollViewer中。这实际上告诉DataGrid它有无限的可用宽度。因为DataGrid不受约束,所以它的宽度将与列所需的宽度相同

如果符合您的设计,您可以设置
HorizontalScrollBarVisibility=“Disabled”
(即,您只需要从ScrollViewer中进行垂直滚动)。这将禁用水平滚动,并将数据网格约束在水平轴上


DataGrid的ControlTemplate中有一个ScrollViewer。作为一条普遍规则:尽量避免滚动查看器中的滚动查看器情况。调试(几乎)总是一件令人头疼的事情,最终你必须将某些东西设置为固定大小(或动态计算大小)。

听起来是个好建议-谢谢。我有Scrollviewer来处理父窗体的大小小于向导页面最小宽度的情况。但是当它变大时,我希望datagrid扩展到可用的宽度。我已经尝试将elementname绑定到forms actualwidth,这似乎可以在blend中很好地预览,但不能更新运行时。