c# - WPF TextBlock中的自动垂直滚动条?




.net scrollbar (6)

我在WPF中有一个TextBlock 。 我写了很多行,远远超过它的垂直高度。 我期望一个垂直滚动条在这种情况发生时自动出现,但它没有。 我试图在“属性”窗格中查找滚动条属性,但找不到一个属性。

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

澄清:我宁愿从设计师那里做,而不是直接写给XAML。


不知道是否有其他人有这个问题,但包装我的TextBlock到一个ScrollViewer有人搞砸了我的用户界面 - 作为一个简单的解决方法,我想通过TextBox替换TextBlock这样的一个

<TextBox  Name="textBlock" SelectionBrush="Transparent" Cursor="Arrow" IsReadOnly="True" Text="My Text" VerticalScrollBarVisibility="Auto">

创建一个TextBox ,它的外观和行为与带滚动条的TextBlock相似(并且您可以在设计器中完成)。


将其包含在滚动查看器中:

<ScrollViewer>
    <TextBlock />
</ScrollViewer>

注意,这个答案适用于原始问题中要求的TextBlock (只读文本元素)。

如果您想在TextBox (可编辑的文本元素)中显示滚动条,请使用ScrollViewer附加属性:

<TextBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
         ScrollViewer.VerticalScrollBarVisibility="Auto" />

这两个属性的有效值是“ Disabled ,“ Auto ,“ Hidden和“ Visible


更好的事情是:

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

这可以确保文本块中的文本不会溢出并覆盖文本块下面的元素,如果不使用网格可能会出现这种情况。 即使文本块已经在其他元素的网格中,我也尝试了其他解决方案时发生在我身上。 请记住,textblock的宽度应该是Auto,并且您应该在Grid元素中指定所需的值。 我在我的代码中做到了这一点,并且它的工作非常好。 HTH。


现在可以使用以下内容:

<TextBox Name="myTextBox" 
         ScrollViewer.HorizontalScrollBarVisibility="Auto"
         ScrollViewer.VerticalScrollBarVisibility="Auto"
         ScrollViewer.CanContentScroll="True">SOME TEXT
</TextBox>

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

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


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

我以另一种方式将MaxHeight放入ScrollViewer中。

只需调整MaxHeight以显示更多或更少的文本行。 简单。







textblock