【发布时间】:2017-10-20 16:54:11
【问题描述】:
将 TextBox 放入具有水平滚动的 ScrollViewer 内的 StackPanel 时,我遇到了一些奇怪的调整大小行为。
StackPanel 中的项目应该伸展到网格列的整个宽度。网格列应占窗口的一半。
TextBox 之后的所有兄弟在更改窗口大小时都不会正确调整大小。
这是我的代码的简化版本,它重现了该问题:
<ScrollViewer HorizontalScrollBarVisibility="Auto">
<Grid>
<StackPanel Background="Gray" Grid.Column="0">
<Border Background="Blue" Height="40"/>
<TextBox/>
<Border Background="RoyalBlue" Height="40"/>
<Border Background="Red" Height="40"/>
</StackPanel>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
</ScrollViewer>
这是 xaml 在 Windows 10 中正确呈现的内容:
如果我调整窗口大小,TextBox 之后的元素不会正确调整大小。如果您继续尝试几次,它们会自行修复。
如果我删除 TextBox 控件并保留 Border 元素,它们都会正确调整大小。 TextBox 控件以某种方式破坏了它之后的边框。我还可以使用数字控件进行复制。
如果我从 ScrollViewer 中删除 HorizontalScrollBarVisibility="Auto",它可以解决问题。我需要这个视图能够自动水平滚动,所以这对我不起作用。如果我删除 ScrollViewer,它也会修复它。
【问题讨论】:
-
在您的网格中使用 ScrollViewer.CanContentScroll="true"
-
UWP 中不存在该属性。我认为它仅适用于 WPF
-
ScrollViewer.VerticalSnapPointsType 不能用作网格的属性。我在父 ScrollViewer 上尝试了 VerticalSnapPointsType 和 HorizontalSnapPointsType ,同时使用 Mandatory 和 Optional ,但没有影响。
-
尝试删除
HorizontalScrollBarVisibility="Auto",问题应该会消失。但我不明白你的布局设置,为什么你需要一个ScrollViewer内部Grid设置"*"作为列宽?
标签: xaml uwp win-universal-app uwp-xaml