【问题标题】:UWP XAML resizing issue with TextBox in StackPanel in ScrollViewer with horizontal scrollUWP XAML 使用水平滚动的 ScrollViewer 中 StackPanel 中的 TextBox 调整大小问题
【发布时间】: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 和 Horizo​​ntalSnapPointsType ,同时使用 Mandatory 和 Optional ,但没有影响。
  • 尝试删除HorizontalScrollBarVisibility="Auto",问题应该会消失。但我不明白你的布局设置,为什么你需要一个 ScrollViewer 内部 Grid 设置 "*" 作为列宽?

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


【解决方案1】:

尝试使用 Grid 和 rows 而不是 StackPanel,因为 Grid 占用尽可能多的空间,但 StackPanel - 他需要尽可能多的空间

【讨论】:

    【解决方案2】:

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

    您可以将 TextBox 替换为 RichEditBox 作为可能的解决方法。它将适用于当前页面布局。 或者你可以考虑如何重新组织页面布局,这样TextBox就会脱离ScrollViewer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2015-09-30
      • 2018-01-29
      • 2016-10-03
      相关资源
      最近更新 更多