当使用水平滚动将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控件以某种方式打破了它之后的Borders。我也可以用数字控件重现。
如果我从ScrollViewer中删除HorizontalScrollBarVisibility="Auto"
,则可以解决问题。我需要这个视图能够自动水平滚动,这对我不起作用。如果我删除了ScrollViewer,它也会修复它。
答案 0 :(得分:0)
如果设置文本,它将正常工作。 Xaml特定的TextBox问题。
您可以使用RichEditBox替换TextBox作为可能的解决方法。它将与当前页面布局一起使用。 或者您可以考虑如何重新组织页面布局,因此TextBox将不再使用ScrollViewer。
答案 1 :(得分:0)
尝试使用Grid
和行代替StackPanel
,因为Grid
占用了尽可能多的空间,但是StackPanel
- 他需要的空间< / p>