我有一个文本块在WPF。我给它写了很多行,远远超过了它的垂直高度。我原以为出现这种情况时,会自动出现一个垂直滚动条,但事实并非如此。我试图在“属性”窗格中查找滚动条属性,但找不到。

我怎样才能使垂直滚动条自动创建为我的TextBlock一旦其内容超过其高度?

澄清:我宁愿从设计器中完成,而不是直接写入XAML。


当前回答

更好的做法是:

<Grid Width="Your-specified-value" >
    <ScrollViewer>
         <TextBlock Width="Auto" TextWrapping="Wrap" />
    </ScrollViewer>
</Grid>

这可以确保文本块中的文本不会溢出,并与文本块下面的元素重叠,因为如果您不使用网格,可能会出现这种情况。当我尝试其他解决方案时,即使文本块已经在与其他元素的网格中,这种情况也发生在我身上。请记住,文本块的宽度应该是Auto,你应该在Grid元素中指定所需的宽度。我在我的代码中这样做了,它工作得很漂亮。 HTH。

其他回答

你可以使用

ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible"

这些是wpf的附加属性。 欲了解更多信息

http://wpfbugs.blogspot.in/2014/02/wpf-layout-controls-scrollviewer.html

<ScrollViewer Height="239" VerticalScrollBarVisibility="Auto">
    <TextBox AcceptsReturn="True" TextWrapping="Wrap" LineHeight="10" />
</ScrollViewer>

这是一种在XAML中使用滚动文本框并将其用作文本区域的方法。

更好的做法是:

<Grid Width="Your-specified-value" >
    <ScrollViewer>
         <TextBlock Width="Auto" TextWrapping="Wrap" />
    </ScrollViewer>
</Grid>

这可以确保文本块中的文本不会溢出,并与文本块下面的元素重叠,因为如果您不使用网格,可能会出现这种情况。当我尝试其他解决方案时,即使文本块已经在与其他元素的网格中,这种情况也发生在我身上。请记住,文本块的宽度应该是Auto,你应该在Grid元素中指定所需的宽度。我在我的代码中这样做了,它工作得很漂亮。 HTH。

不知道如果别人有这个问题,但包装我的TextBlock到一个ScrollViewer某种程度上混乱了我的UI -作为一个简单的解决办法,我想出了替换TextBlock的文本框像这样一个

<TextBox  SelectionBrush="Transparent" 
          Cursor="Arrow" 
          IsReadOnly="True" 
          Text="{Binding Text}" 
          VerticalScrollBarVisibility="Auto">

创建一个文本框,看起来和行为像一个滚动条的TextBlock(你可以在设计器中做这一切)。

<ScrollViewer MaxHeight="50"  
              Width="Auto" 
              HorizontalScrollBarVisibility="Disabled"
              VerticalScrollBarVisibility="Auto">
     <TextBlock Text="{Binding Path=}" 
                Style="{StaticResource TextStyle_Data}" 
                TextWrapping="Wrap" />
</ScrollViewer>

我用另一种方式做到这一点,把MaxHeight放在ScrollViewer中。

只需调整MaxHeight来显示更多或更少的文本行。一件容易的事。