XAML:如何将数据网格限制为其父级宽度

问题描述 投票:0回答:1

我有一个 [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 中的所有内容都有效。 但我希望网格在用户调整包含向导容器的表单大小时展开。

xaml
1个回答
2
投票

您已将 DataGrid 封装在 ScrollViewer 中。这实际上告诉 DataGrid 它具有无限的可用宽度。由于 DataGrid 不受约束,因此它的宽度将与列所需的宽度一样多。

如果适合您的设计,您可以设置

HorizontalScrollBarVisibility="Disabled"
(即您只需要从 ScrollViewer 中垂直滚动)。这将禁用水平滚动并将 DataGrid 限制在水平轴上。

DataGrid 在其 ControlTemplate 中有一个 ScrollViewer。作为一个广泛的一般规则:尝试避免 ScrollViewer-in-a-ScrollViewer 的情况。调试(几乎)总是令人头疼,最终您必须将某些内容设置为固定大小(或动态计算大小)。

© www.soinside.com 2019 - 2024. All rights reserved.