我正在尝试弄清楚如何使我的
主窗口的结构如下:
- 网格(2列为0.3*和0.7*) - 边框 - 网格(7行,其中一行设置为*,ContentControl位于其中) - ScrollViewer,其中包装了一个具有自动宽度的ContentControl的StackPanel(仅用于测试)
- 网格(宽度设置为UserControl的ActualWidth,6行中有一行设置为Auto,其中放置了ItemsControl - ItemsControl,描述了DataTemplate类型的ItemTemplate,其中包含一个Grid,内部有一个DataGrid
实际问题是ContentControl随着窗口的调整而增长,但不会随着窗口大小调整而缩小。
主视图XAML(为了清晰起见而截短):
那么会发生什么呢?
我已经尝试了很多方法,例如为
在某些情况下,我确实设法使水平滚动条正确显示,但不幸的是,这会使我的
我知道为了使水平滚动条起作用,scrollviewer 的父级或子级需要设置宽度,我猜我无法确定我需要限制的确切位置。DataGrids 需要在主窗口中无限扩展,同时使第一列填充所有可用空间。如果您需要更多信息,请告诉我,我会很乐意回答。
ContentControl
在水平方向上正确滚动(垂直方向目前没有问题)。通过“正确”,我是指我希望看到的内容在最小尺寸下会拉伸(无限扩展),同时会出现滚动条,以便内容不会在ContentControl
区域后溢出。因此,这里是一个快速介绍:主窗口的结构如下:
- 网格(2列为0.3*和0.7*) - 边框 - 网格(7行,其中一行设置为*,ContentControl位于其中) - ScrollViewer,其中包装了一个具有自动宽度的ContentControl的StackPanel(仅用于测试)
ContentControl
的模板:- 网格(宽度设置为UserControl的ActualWidth,6行中有一行设置为Auto,其中放置了ItemsControl - ItemsControl,描述了DataTemplate类型的ItemTemplate,其中包含一个Grid,内部有一个DataGrid
实际问题是ContentControl随着窗口的调整而增长,但不会随着窗口大小调整而缩小。
主视图XAML(为了清晰起见而截短):
<ScrollViewer Grid.Row="5" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ContentControl Grid.Row="5" Background="Transparent" Focusable="False" Margin="0,5,0,0"
Content="{Binding CurrentSection}" ContentTemplateSelector="{StaticResource templateSelector}/>
</ScrollViewer>
临时的 XAML 模板(为清晰起见截短):
<Grid>
...
<ItemsControl Grid.Row="4" ItemsSource="{Binding Data.QualifyingDistributionsDividends}" x:Name="QualifyingItemsControl">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid x:Name="DTLayoutGrid">
...
<Grid Grid.Row="1" x:Name="DataLayout" Width="{Binding ElementName=DTLayoutGrid, Path=ActualWidth}" HorizontalAlignment="Stretch">
...
<DataGrid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="8" HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Payments}" Style="{StaticResource DataGridStyle}" CellStyle="{StaticResource DataGridNormalCellStyle}">
</DataGrid>
</Grid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
那么会发生什么呢?
Datagrid
假定整个 DataTemplate
的宽度(或者是其底层控件被设置为 DataTemplates
大小),然后 * 列假定所有的空白空间。当您尝试调整包含此代码的整个窗口大小时,它将正确地增长,扩展 * 列,但似乎缩小没有“注册”,并保持您将其扩展到的大小,对其应用滚动条并忘记它。我已经尝试了很多方法,例如为
ItemsControl
、其底层父元素如 Grid 等设置宽度,还设置了 ContentControl
、StackPanel
、ScrollViewer
和其父级 Grid 的大小。我还尝试直接在 Datagrid
上使用 scrollviewer
,这会产生一个癫痫般的“每秒 100 万次调整大小”的场景。我还尝试过玩弄 HorizontalAlignments
。在某些情况下,我确实设法使水平滚动条正确显示,但不幸的是,这会使我的
DataGrid
的 * 列假定宽度为 Auto
,而不是 Star
,因此 DataGrid
开始在右侧有一个空白区域(不可接受,不幸的是...)我知道为了使水平滚动条起作用,scrollviewer 的父级或子级需要设置宽度,我猜我无法确定我需要限制的确切位置。DataGrids 需要在主窗口中无限扩展,同时使第一列填充所有可用空间。如果您需要更多信息,请告诉我,我会很乐意回答。
HorizontalAlignment="Stretch"
也无效,移除ScrollViewer.CanContentScroll="False"
也是如此。 - kosdos