2017-02-03 38 views
1

此文本框永远不会让我滚动。我相当确定这是因为它正在垂直扩展以“显示”所有文本。但是,它正在扩展到它所在的网格行的底部,所以文本没有被显示 - 但滚动条被禁用(因为它认为没有理由显示它们)。WPF中的可滚动文本框不会滚动,因为它大于容器

结果我看到了文件中的文本的顶部,它被切断,当它到达它在网格单元的底部

什么我需要做的告知控制: “扩展到所在网格单元的宽度和高度,并在文本不适合该空间时显示垂直滚动条”?

<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> 

回答

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是多余的,除非你有里面更多的控制。

编辑: 嗯......都喜欢mm8user2837961首先解释一个Scrollviewer无厘头一个StackPanel里面,因为StackPanel可以得到无限扩展。 ScrollViewer仅当它内部的对象大于自身的大小时才起作用。通过给你的Grid row大小*,你分配该行的网格的剩余空间,意味着属于该行的项目获得固定的大小。如果您的Textbox大于ScrollViewer大小,则会触发ScrollBarVisibility

+0

它的作品!是因为grid.row和grid.column确实不属于文本框,而是在超级堆栈面板中? – DrDamnit

2

为什么你需要一个StackPanel?我建议你删除它,并放置在ScrollViewerGrid.ColumnGrid.Row

<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

内StackPanels把ScrollViewers是一个坏主意。这是因为如果一个StackPanel的Orientation属性设置为Horizo​​ntal,并且它的垂直空间设置为Vertical,那么它将用无限的水平空间测量其子级。请参考我的答案在这里,了解更多有关这一点:

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进一步上涨的可视化树。