kos*_*dos 6 wpf xaml scrollviewer width contentcontrol
我正在试图弄清楚如何让我ContentControl
正确地水平滚动(此刻垂直方向).通过正确我的意思是我希望看到内容伸展(无限扩展),同时具有滚动条出现的最小尺寸,以使内容不会溢出该ContentControl
区域,所以这里是一个快速介绍:
主窗口以这种方式构造:
ContentControl
的模板:
实际问题是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>
Run Code Online (Sandbox Code Playgroud)
Tempate 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>
Run Code Online (Sandbox Code Playgroud)
那会发生什么?Datagrid
假设整个宽度DataTemplate
(以及其设置为DataTemplates
大小的底层控件,然后*列假定所有空的空间.当您尝试调整保存此代码的整个窗口时,它将正确生长,扩展*列但似乎缩小没有"注册",它保持你扩展它的大小,在其上应用滚动条并忘记它.
我已经试过到目前为止是设置宽度ItemsControl
,其潜在的父母喜欢网等,还设置大小ContentControl
,StackPanel
,ScrollViewer
那和家长电网.我也试过scrollviewer
直接使用s Datagrid
产生一个癫痫"100万调整一秒"的场景.我也有发挥各地HorizontalAlignments
在某些情况下,我没有设法拿到了水平滚动条来正确显示但不幸的是,让我DataGrid
的*柱承担Auto
宽度而不是Star
这样DataGrid
开始有一个空白区域向右(不可接受的不幸... )
我知道为了使水平滚动条工作,滚动查看器的父或子需要宽度设置,我想我无法确定我需要限制它的确切位置.DataGrids需要在主窗口无限扩展的同时让第一列填充所有可用空间.如果您需要更多相关信息,请立即告诉我,我很乐意回答.
在我看来,这只是可怕的StackPanel
布局问题的另一种情况。这个问题一遍又一遍地出现,我承认当我开始学习WPF时遇到了同样的问题。该StackPanel
不会不采取其父的可用大小考虑,而其他Panel
S,从而为一个DockPanel
或一个Grid
(是的,这实际上是一个Panel
太)做的。
在MSDN上的“ 如何:在StackPanel和DockPanel之间选择”页面中对此进行了说明:
尽管可以使用DockPanel或StackPanel来堆叠子元素,但两个控件并不总是产生相同的结果。例如,子元素的放置顺序会影响DockPanel中子元素的大小,但不会影响StackPanel中子元素的大小。发生这种不同的行为是因为StackPanel在Double.PositiveInfinity;处沿堆叠方向进行测量。但是,DockPanel仅测量可用大小。
本StackPanel
应只有真正被用于对准了一些项目,如Button
在一条直线S或其他控件,其中可用空间是不是一个问题。因此,无论如何,解决方案应该很简单...只需StackPanel
从中删除即可ScrollViewer
。无论如何,它似乎没有任何作用。
更新>>>
再次看后,好像你说的问题是内部的DataTemplate
,对不对?您可以通过将ItemsControl.HorizontalContentAlignment
属性设置为来解决此问题Stretch
。这样可以确保每个项目都保持在的范围内ItemsControl
。
我也将删除您的Binding
,Grid.Width
因为您不需要... 默认情况下,孩子Grid
将占用父母的全部空间Grid
。如果这些想法不起作用,请简化您的问题。认真地说,如果您遵循我在评论中提供的帮助中心链接页面中的建议,那么您将解决问题,或者可以返回此处并提供完整但简洁的示例,测试。
归档时间: |
|
查看次数: |
5352 次 |
最近记录: |