UWP XAML使用水平滚动调整ScrollViewer中StackPanel中TextBox的问题

时间:2017-05-20 17:41:39

标签: xaml uwp win-universal-app uwp-xaml

当使用水平滚动将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中正确呈现的内容:

Example 1

如果我调整窗口大小,TextBox之后的元素不会正确调整大小。如果你继续尝试几次,他们会自行解决。

Example 2

如果我删除TextBox控件并保留Border元素,它们都会正确调整大小。 TextBox控件以某种方式打破了它之后的Borders。我也可以用数字控件重现。

如果我从ScrollViewer中删除HorizontalScrollBarVisibility="Auto",则可以解决问题。我需要这个视图能够自动水平滚动,这对我不起作用。如果我删除了ScrollViewer,它也会修复它。

2 个答案:

答案 0 :(得分:0)

如果设置文本,它将正常工作。 Xaml特定的TextBox问题。

您可以使用RichEditBox替换TextBox作为可能的解决方法。它将与当前页面布局一起使用。 或者您可以考虑如何重新组织页面布局,因此TextBox将不再使用ScrollViewer。

答案 1 :(得分:0)

尝试使用Grid和行代替StackPanel,因为Grid占用了尽可能多的空间,但是StackPanel - 他需要的空间< / p>

相关问题