在文本显示中,换行是当行已满时继续在新行上的特征,使得每行适合可视窗口,允许从上到下读取文本而不进行任何水平滚动。
WPF VirtualizingStackPanel 排序后文本换行问题
我是 WPF 新手,编写此程序是为了帮助组织和编目我的书籍。我使用了虚拟化包裹面板,在我对书籍进行排序之前,该面板可以完美显示。 这是视图预排序:
我将用 PHP 制作一个自动换行算法。我想将小块文本(短语)拆分为 n 行,最多 m 个字符(未给出 n,因此将有所需的行数)。
这是我第一次就这个令人惊叹的服务发布问题,因为今天它通过阅读它对我帮助很大。 目前,我正在制作小型 C# 应用程序,需要使用大量文本...
我想将文本放入容器中,但无论我尝试什么,它似乎仍然想要添加水平滑块。 我尝试添加自动换行:break-word:、display: inline-block; 和 max-wi...
我在 App.xaml 中定义了以下样式 <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> ...</desc> <question vote="13"> <p>我在 App.xaml 中定义了以下样式</p> <pre><code><Style x:Key="textBoxMultiline" TargetType="{x:Type TextBox}" > <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> <Setter Property="HorizontalScrollBarVisibility" Value="Hidden" /> <Setter Property="MinHeight" Value="50" /> <Setter Property="TextWrapping" Value="Wrap" /> </Style> </code></pre> <p>在整个解决方案中,我们在每个需要简短文本的文本框上使用它。</p> <pre><code><TextBox x:Name="textBoxDescription" Grid.Row="2" Grid.Column="1" Style="{DynamicResource textBoxMultiline}" /> </code></pre> <p>一切都很好,但随后客户抱怨某些字段被合并在分辨率较低的旧显示器上,因此我在较高的视觉树节点之一上放置了<pre><code>ScrollViewer</code></pre>以防止合并。</p> <pre><code><ScrollViewer Height="Auto" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> ... </ScrollViewer> </code></pre> <p>奇怪的是,具有上述样式的 <pre><code>TextBox</code></pre> 开始向右扩展,而不是环绕文本。</p> <p>有没有办法在不删除<pre><code>ScrollViewer</code></pre>的情况下防止这种情况? </p> </question> <answer tick="false" vote="11"> <p>如果您不想对宽度进行硬编码,那么您可以使用元素绑定父项的宽度。</p> <p>这里我将 TextBox MaxWidth 与 ScrollViewer 实际宽度绑定。您还必须确保 ColumnDefinition 宽度应设置为“*”而不是“Auto”。如果将其设置为“自动”,它将忽略 ScrollViewer 宽度并继续扩展 ScrollViewer 和 TextBox 的宽度。 <em><strong>我认为你属于这种情况</strong></em>...</p> <pre><code><Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"></ColumnDefinition> <ColumnDefinition Width="*"></ColumnDefinition> </Grid.ColumnDefinitions> <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="scv"> <TextBox Height="30" TextWrapping="Wrap" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}"></TextBox> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="true" vote="9"> <p>您必须为<pre><code>MaxWidth</code></pre>定义一个<pre><code>TextBox</code></pre>,否则没有限制,因为<pre><code>ScrollViewer</code></pre>。</p> </answer> <answer tick="false" vote="6"> <p>@bathineni 提供的解决方案帮助我解决了我的问题。这对我有用:</p> <pre><code><Grid > <Grid.ColumnDefinitions> <ColumnDefinition Width="50"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Grid.Column="0" Width="30" Height="23" Margin="10,5" Content="..."/> <ScrollViewer Grid.Column="1" HorizontalScrollBarVisibility="Disabled" verticalScrollBarVisibility="Disabled" Name="scv"> <TextBox Height="25" Text="Insert here long text" MaxWidth="{Binding ElementName=scv, Path=ActualWidth}" HorizontalAlignment="Stretch" /> </ScrollViewer> </Grid> </code></pre> </answer> <answer tick="false" vote="1"> <p>第一个解决方案是使用数据绑定在 XAML 中实现的。我建议你不要单独绑定控件。 XAML 解决方案是通过将具有所需 ActualWidth 和 ActualHeight 属性的控件绑定到文本框 MaxHeight 和 MaxWidth 属性来实现的。</p> <pre><code><TextBlock x:Name="PasswordText" Margin="0,0,0,20" FontFamily="Bahnschrift SemiBold Condensed" Text="PASSWORD" FontSize="20"> <TextBox x:Name="PasswordTextBox" MaxWidth="{Binding ElementName=PasswordText, Path=ActualWidth}" MaxHeight="{Binding ElementName=PasswordText, Path=ActualHeight}"> </code></pre> <p>下一个解决方案是通过在 XAML 中生成 Loaded 事件,在 C# 代码中创建它,然后在 Loaded 事件中将文本框的 MaxWidth 和 MaxHeight 属性设置为文本框 ActualWidth 和 ActualHeight 属性来实现。</p> <pre><code>// It doesn't have a problem like in XAML if you pass the textbox its own // ActualWidth and ActualHeight to the MaxWidth and MaxHeight proprieties. private void Log_In_Page_Loaded(object sender, RoutedEventArgs e) { UsernameTextBox.MaxHeight = UsernameTextBox.ActualHeight; UsernameTextBox.MaxWidth = UsernameTextBox.ActualWidth; } </code></pre> <p>选择更适合你设计的一个,但我认为,在我看来,这是解决这个问题最有效、最简单、最稳定、最有效的方法。</p> </answer> <answer tick="false" vote="0"> <p>对我有用。如果你想让滚动条出现在文本框中,你可以添加</p> <pre><code>HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" </code></pre> <p>到文本框 </p> </answer> <answer tick="false" vote="0"> <p>您必须设置 <pre><code>MaxWidth</code></pre><pre> 的 </pre><code>Container Control</code></p> <pre><code><Grid x:Name="RootGrid" Margin="6,6,8,8" Width="500" MaxWidth="500"> <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <GroupBox Name="contentGroup" Header="Content" Grid.Row="0"> <TextBox Name="content"/> </GroupBox> </Grid> </ScrollViewer> </code></pre> <p></p> </answer> <answer tick="false" vote="0"> <p>当我需要我的<pre><code>TextBox</code></pre>在调整大小时与其自动调整大小的<pre><code>Grid</code></pre>列一起拉伸时,我遇到了这个问题,这意味着<pre><code>MaxWidth</code></pre>不起作用,但仍然需要防止<pre><code>TextBox</code></pre>拉伸及其内容。</p> <p>我最终所做的是将这个事件处理程序链接到<pre><code>SizeChanged</code></pre>:</p> <pre><code>private void TextBox_SizeChanged(object sender, SizeChangedEventArgs e) { TextBox textBox = (TextBox)sender; if (textBox.CanUndo && e.NewSize.Width > e.PreviousSize.Width) { textBox.Width = e.PreviousSize.Width; } } </code></pre> <p>将文本写入文本框是用户可以撤消的操作,而其他可能导致调整大小的操作(元素的初始绘制、父容器的拉伸等)则无法从文本框中撤消。因此,通过检查 <pre><code>CanUndo</code></pre>,我们可以确定 <pre><code>SizeChanged</code></pre> 是否是由写入文本或其他内容触发的。</p> <p><pre><code>e.NewSize.Width > e.PreviousSize.Width</code></pre> 检查是必要的,因为没有它,<pre><code>SizeChanged</code></pre> 事件将从自身内部无限地调用,因为要恢复拉伸,我们需要 <em>将大小</em> 更改回原始值,这本身就会触发事件。</p> <p>这有点棘手,但我还没有遇到任何问题。</p> </answer> <answer tick="false" vote="0"> <p>我不知道为什么,但我无法让 ScrollViewer 解决方案工作。我需要一个具有固定初始宽度的 TextBox 来实现数字向上/向下控件 - 在此控件中,TextBox 独立于输入而缩小和增长,如果 UI 在您键入时发生变化,这看起来非常烦人。</p> <p>所以,我发现以下使用 2 个文本框的解决方案适合我。第一个文本框是为用户键入输入而显示的文本框,第二个文本框通过依赖属性 (DisplayLength) 和下面进一步显示的转换器进行初始化。</p> <p>将第一个文本框的 MaxWidth 属性绑定到第二个文本框的 Width 属性可以固定大小,以便用户可以键入他们想要的内容,但即使有更多可用的 UI 空间,文本框的显示宽度也不会改变。</p> <pre><code><TextBox x:Name="PART_TextBox" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxWidth="{Binding ElementName=TBMeasure, Path=ActualWidth}" /> <!-- Hidden measuring textbox ensures reservation of enough UI space according to DisplayLength dependency property --> <TextBox x:Name="TBMeasure" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayLength, Converter={StaticResource ByteToPlaceHolderStringConverter}}" Margin="0,0,1,0" TextAlignment="Right" AcceptsReturn="False" SpellCheck.IsEnabled="False" HorizontalContentAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Visibility="Hidden"/> // Converter [ValueConversion(typeof(byte), typeof(string))] public sealed class ByteToPlaceHolderStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if ((value is byte) == false) return Binding.DoNothing; byte byteVal = (byte)value; string retString = string.Empty; for (int i = 0; i < byteVal; i++) retString = retString + "X"; return retString; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return Binding.DoNothing; } } </code></pre> </answer> </body></html>
我有一堆非常长的文件名,导致我的 HTML 格式溢出。 所有这些文件名都使用下划线而不是空格,如果它们是空格,则很容易断开/换行。 就像...
我在一个网站上读到,有一种方法可以将文本环绕在非矩形形状周围,但不知何故我不知道该怎么做, 现在我从大约 3 年前发布的一个问题中找到了这个链接,那...
我需要使用逗号(,)换行。有没有办法使用 CSS 或其他方法来做到这一点。 普通 A1、高 A2(4)、低 A3 如果空间不够,应该这样换行,逗号 sh...
如何在 Github 和 Gitlab 问题中的 markdown ``` 代码 ``` 中换行?
例如: ```` 一些很长的线;一些很长的线;一些很长的线;一些很长的线;一些很长的线;一些很长的线;一些很长的线;一些很长的线;一些很长的线; ...
是否可以在最大宽度处进行一些文本换行,然后使生成的文本元素在宽度方向上尽可能小? 目前,当我的文本长度超过最大宽度时,它会换行并且
如何在 SwiftUI 中创建一个根据 swiftui 中文本行数扩展宽度的矩形(类似于 uikit 中的 Wrap Content)
在一个 SwiftUI 项目中工作,我需要一个蓝色矩形来根据它包含的文本行数调整其宽度,特别是不是动态的,而是基于固定的行数(...
我正在实现类似由分隔符分隔的热(可点击)文本的面包屑痕迹,如果需要的话,我希望整个内容可以根据需要包装在热文本中间
当我在网站上制作一些水平居中的文本时,当文本换行时,它看起来像这样: 但我希望这段文字均匀分布,如下所示: 我怎样才能以这样的方式实现这一目标...
我一直在使用空白并且对此感到满意。仍然是。然后,我注意到还有一种叫做文本换行的东西。我在互联网上的某个地方看到没有浏览器支持
我对 HTML 和 CSS 非常陌生,我正在尝试制作一个小型网站来完成作业。我还没有走得太远,并且在文本换行方面遇到了麻烦。 文字的第一行看起来很棒,...
我正在制作一个绘图,其中变量描述出现在facet_wrap()方面的左侧“条带”文本中。有时,当变量描述足够长而需要换行时,最后一行...
我正在努力解决 Flexbox 布局问题,我希望对 中归类为单词对的单词进行特定的换行行为。要求是单词在屏幕上保持在一起...
我有一个 CEdit 控件,并将其在资源中设置为多行。 用户可以键入文本,如果文本对于控件来说太宽,则会自动换行。伟大的。 现在,我知道我可以通过 str...
如果你看一下 https://www.cranberryleague.com 并向下滚动到“2024 年记分牌”,我似乎无法弄清楚为什么位于 span 元素内的球队种子是包装的...
我有一个很长的向量字符串(DNA 序列),最多有几千个连续字符,我想将其添加到我的knitr 报告输出中。 RStudio 在控制台中完美地处理文本换行...