【问题标题】:Appying Background Color to entire line of Text将背景颜色应用于整行文本
【发布时间】:2011-11-25 19:11:50
【问题描述】:

我在 WPF 应用程序中有一个 RichTextBox。我想对每一行文本应用替代颜色。我已将 Background 属性设置为所需的颜色,但由于文本长度的不同,只有包含文本的部分才会获得背景颜色。如何设置属性,以便将整行设置为所需的背景颜色。

一种不太优雅的解决方案是,填充一些空格,但如果 R​​ichTextBox 布局发生变化,则需要通过反复试验来更改代码。

有更好的方法吗?

【问题讨论】:

  • 能否请您发布有关如何定义颜色的代码?
  • 你能解释一下用户的行为吗?我是否应该假设这就是您正在做的事情...... 1. 在彼此下方键入 3 行。 2. 选择其中一条线并设置背景颜色。 3. 期望背景跨越该行的富文本框/水平滚动条的宽度?
  • @AngelWPF:不会有任何水平滚动条。宽度是固定的。这很像人们为了减少阅读痛苦而做的替代着色。

标签: c# wpf richtextbox background-color


【解决方案1】:

如果所有线的高度相同,那么您可以将背景图形应用到RichTextBox 本身,这将具有相同的效果(根据需要设置尺寸/颜色):

<RichTexBox>
    <RichTexBox.Background>
            <VisualBrush TileMode="Tile" Viewport="0 0 100 100" ViewportUnits="Absolute">
                <VisualBrush.Visual>
                    <StackPanel>
                       <Rectangle Width="100" Height="50" Fill="Red" />
                       <Rectangle Width="100" Height="50" Fill="Blue" />
                    </StackPanel>
                </VisualBrush.Visual>
            </VisualBrush>
    </RichTexBox.Background>
</RichTexBox>

【讨论】:

  • 这些行是动态生成的,所以我不可以调整这个现有的 XAML 代码来完成这项任务。虽然,我还没有尝试过你建议的方法,但它是否适用于超过 3 行?
【解决方案2】:

尝试使用List 以背景色突出显示行。当RichTextBox.TextChanged 事件中任何人更改Text 时,刷新ListItem 集合(根据文本中的行数)。

    <RichTextBox>
        <RichTextBox.Document>
            <FlowDocument>
                <List>
                    <ListItem Background="Red" />
                    <ListItem Background="Green"/>
                    <ListItem Background="Yellow"/>
                </List>
            </FlowDocument>
        </RichTextBox.Document>
    </RichTextBox>

我认为您可以通过覆盖列表的样式来改变列表的 bulleted 外观。

【讨论】:

    【解决方案3】:

    我想知道如何使用动态生成的项目进行这项工作。对于我的实际情况,我使用了额外的空格。目前,这是我要走的路。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多