这个文本框永远不会让我滚动。我很确定这是因为它是垂直扩展以“显示”所有文本。但是,它正在扩展到它所在的网格行的底部(并在其下面),因此文本没有显示 - 但是滚动条被禁用(因为它认为没有理由显示它们)。
结果是我看到文件中文本的顶部,当它到达网格单元格底部时会被切断。
告诉控件我需要做什么:“扩展到您所在的网格单元格的宽度和高度,并在文本不适合该空间时显示垂直滚动条”?
<StackPanel Grid.Column="1" Grid.Row="1">
<ScrollViewer CanContentScroll="True" VerticalScrollBarVisibility="Visible">
<TextBlock x:Name="longText" Foreground="White" FontFamily="Times New Roman" FontSize="24" TextWrapping="Wrap" />
</ScrollViewer>
</StackPanel>
答案 0 :(得分:2)
为什么需要StackPanel
?我建议您将其删除,并将Grid.Column
和Grid.Row
放入ScrollViewer
:
<ScrollViewer Grid.Column="1" Grid.Row="1" CanContentScroll="True" VerticalScrollBarVisibility="Visible">
<TextBlock x:Name="longText" Foreground="White" FontFamily="Times New Roman" FontSize="24" TextWrapping="Wrap" />
</ScrollViewer>
答案 1 :(得分:1)
将ScrollViewers放在StackPanels中是个坏主意。这是因为如果StackPanel的Orientation属性设置为Horizontal而无限的垂直空间(如果设置为Vertical),则StackPanel将测量具有无限水平空间的子级。有关详细信息,请参阅我的答案:
Horizontal scroll for stackpanel doesn't work
这基本上意味着ScrollViewer元素在这里具有无限高度,因此不会显示垂直滚动条。
所以,正如@ user2837961所建议的,你应该简单地摆脱StackPanel:
<ScrollViewer Grid.Column="1" Grid.Row="1" VerticalScrollBarVisibility="Visible">
<TextBlock x:Name="longText" Foreground="White" FontFamily="Times New Roman" FontSize="24" TextWrapping="Wrap" />
</ScrollViewer>
还要确保可视树中没有其他StackPanel。
答案 2 :(得分:1)
如果你把它改成这个就行了。
<ScrollViewer Grid.Column="1" Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock x:Name="longText" Foreground="White" FontFamily="Times New Roman" FontSize="24" TextWrapping="Wrap" />
</StackPanel>
</ScrollViewer>
但同时你必须确保你的网格高度设置为*
或固定大小:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/> //Or whatever size you want
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ScrollViewer Grid.Column="1" Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel>
<TextBlock x:Name="longText" Foreground="White" FontFamily="Times New Roman" FontSize="24" TextWrapping="Wrap" />
</StackPanel>
</ScrollViewer>
</Grid>
顺便说一下,除非你内部有更多控件,否则你的StackPanel
是多余的。
修改强>
好吧......首先,mm8
和user2837961
解释了Scrollviewer
在StackPanel
内没有意义,因为StackPanel
可以扩展无限。 ScrollViewer
仅在其中的对象大于自身大小时才有效。通过为Grid row
提供*
的大小,您可以为该行分配网格的剩余空间,这意味着属于该行的项目将获得固定大小。如果您的Textbox
大于ScrollViewer
尺寸,则会触发ScrollBarVisibility
。