Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF如何使文本框可滑动_C#_Wpf - Fatal编程技术网

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