WPF ScrollViewer 改变 TextBlock 宽度

WPF ScrollViewer changing TextBlock width

我有一个带有 TextBlock 的简单对话框,它应该使用 window 调整大小并在内容比 TextBlock/Dialog 宽时显示滚动条。没有 ScrollViewer,它工作正常 - TextBlock 与 window 一样宽。一旦我添加了 ScrollViewer,TextBlock 就会变得更宽(它适合内容宽度)。为什么 ScrollViewer 会改变 TextBlock 的行为,我该如何防止这种情况?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="*" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Label Grid.Row="0" Grid.Column="0" Content="A label"/>
    <ScrollViewer Grid.Row="1" Grid.Column="0" Margin="10" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Border BorderThickness="0.5" BorderBrush="Gray">
            <TextBlock MinHeight="200" MinWidth="600"
                       Text="Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... Some long text ... " />
        </Border>
    </ScrollViewer>        
    <Button Grid.Row="2" Grid.Column="0" Width="80" Margin="0 10 15 15" Height="25" HorizontalAlignment="Right" Content="OK"/>
</Grid>

因为 ScrollViewer 可以根据需要提供尽可能多的控件 space 并帮助滚动它们。我认为你的问题是边框,你只需要将 ScrollViewer 放在边框内,一切都会很好。

我们不太明白你的问题。 您希望使用 window/dialog 调整 TextBlock 的大小。 使用或不使用 ScrollViewer,TextBlock 将根据 window 相应地调整大小。 当内容不适合屏幕时,ScrollViewer 只是让您滚动元素的内容,在本例中为 TextBlock。您的代码没有任何问题,只是视觉表示让您感到困惑。 :) 希望你能明白。