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以显示更多或更少的文本行。 简单。