C# WPF如何使文本框可滑动
所以我有一个固定高度和宽度的文本框。 我想在文本框上有一个滑块或其他东西,使丢失的文本可见。 缺少文本是指长度超过文本框宽度的文本。 它不一定是一个滑动条,只是允许我看到剪切的文本 我试过:C# WPF如何使文本框可滑动,c#,wpf,C#,Wpf,所以我有一个固定高度和宽度的文本框。 我想在文本框上有一个滑块或其他东西,使丢失的文本可见。 缺少文本是指长度超过文本框宽度的文本。 它不一定是一个滑动条,只是允许我看到剪切的文本 我试过: <TextBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" /> 但它对我没有任何作用。测试一下: <T
<TextBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Auto" />
但它对我没有任何作用。测试一下:
<TextBox ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
Width="300"
Height="200"
TextWrapping="Wrap"
AcceptsReturn="True"
FontSize="22pt"
Text="Some loooooooooong text. Some loooooooooong text. Some long text. Some long text. Some long text. Some long text. Some long text. Some long text. "
/>
如果希望有多行文本水平滚动,则必须在ScrollViewer
中明确包装TextBox
,并正确设置大小以限制ScrollViewer
的内容:
<ScrollViewer
Width="200"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<TextBox Name="txb1"
Width="500"
VerticalAlignment="Stretch"
TextWrapping="Wrap"
AcceptsReturn="True"
FontSize="22pt"
Text="Some loooooooooong text. Some loooooooooong text. Some long text. Some long text. Some long text. Some long text. Some long text. Some long text. "
/>
</ScrollViewer>
其中,我使用的近似字符宽度为:
approximatedCharWidth = MeasureString(txb1, "lext").Width/4.0;
private Size MeasureString(TextBox textBlock, string candidate)
{
var formattedText = new FormattedText(
candidate,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
textBlock.FontSize,
Brushes.Black,
new NumberSubstitution(),
1);
return new Size(formattedText.Width, formattedText.Height);
}
如果您只有一个没有换行的普通字符串,那么这只能用于水平或垂直滚动 如果你可以水平滚动,那么你告诉文本它可以像它喜欢的那样宽。这意味着你会得到一条线 如果您希望它跨越多行,那么您需要在文本中使用换行符,或者避免任何水平滚动 鉴于您似乎不希望垂直滚动,我尝试了以下方法:
<TextBox ScrollViewer.HorizontalScrollBarVisibility="Auto"
Text="ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ"
Height="36"
Width="200"
/>
其中:
这似乎就是您所追求的。您是否尝试过设置
水平滚动条可见性=自动“
?垂直滚动条不会显示,除非文本是多行的,如果它没有包装,则可能全部在一行。如果我添加此ScrollViewer.HorizontalScrollBarVisibility=“自动“什么也没发生我看不到滚动条或任何关于添加工具提示的内容?我想更改文本框中的值它只适用于垂直滚动条。如果我将“垂直”设置为“禁用”,将“水平”设置为“自动”,则不会执行任何操作。复制粘贴了你的文本框。你解决了。谢谢。但是现在滚动条占用了太多的空间。除了滚动条还有其他解决方案吗?也许通过单击文本框,它会变大,当我离开它时,它会再次变小。@Explorer2501您可以根据需要设置滚动条的样式(以及大小),尽管这可能有点困难。如果你有表达式混合,我认为它更容易。无论如何,您可以通过在Google上搜索“wpf样式滚动查看器”或“wpf自定义滚动查看器”来了解如何实现这一点。下面是一个@Explorer2501示例,您还可以根据TextBox.IsFocused属性隐藏/显示它,例如编写转换器(将bool转换为ScrollBarVisibility)。Bind HorizontalScrollBarVisibility=“{Binding ElementName=txb1,Path=IsFocused,Converter={converters:Converter\u BoolToScrollBarVisibility}”
approximatedCharWidth = MeasureString(txb1, "lext").Width/4.0;
private Size MeasureString(TextBox textBlock, string candidate)
{
var formattedText = new FormattedText(
candidate,
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch),
textBlock.FontSize,
Brushes.Black,
new NumberSubstitution(),
1);
return new Size(formattedText.Width, formattedText.Height);
}
<TextBox ScrollViewer.HorizontalScrollBarVisibility="Auto"
Text="ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ ABCDEFGIJKLMNOPQRSTUVWXYZ"
Height="36"
Width="200"
/>