具有RTF,无Word自动换行和可选文本的WPF控件

时间:2015-11-20 20:31:50

标签: c# wpf xaml

我需要一个能够选择里面显示的文本的控件(只读),但我还需要能够用Bold和Italics格式化文本,因为它是一个期刊引用。此外,我希望控件能够根据文本或内容(拉伸)进行调整。这是一个例子:

儿童和家庭行为治疗 26.1 (2004)。

我最接近的是RichTextBox以下this示例。 This TextBlock示例也很接近,但不允许内联字体样式(粗体,斜体等)。

当前的RichTextBox解决方案

    richTextBox1.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
    richTextBox1.Document.PageWidth = 1000;

为什么这不起作用:期刊可以有很长的名称,并且添加了一个描述,它很容易到达页面的末尾,导致内容无论如何都要包装。相反,一个没有描述的短名称期刊仍然有一个滚动条,通向大量的空白区域。

当前TextBlock / TextBox解决方案

    <TextBox Background="Transparent"
     BorderThickness="0"
     Text="{Binding Text, Mode=OneWay}"
     IsReadOnly="True"
     TextWrapping="NoWrap" />

为什么这不起作用:我要么使用默认的TextBlock而无法选择文本(用户应该能够复制粘贴),或者使用这个TextBox绑定会丢失样式功能。

我还是WPF的新手,并且对如何编辑某些控件知之甚少,例如使用OverridesDefaultStyleControlTemplate等按钮。我只是不能这样做似乎找到了一个具有我需要的三个属性的控件,或者一种控件可以自定义以实现我想要的方式。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我会选择自定义TextBlockRichTextBox似乎有点矫枉过正。

1)滚动和调整大小

<ScrollViewer CanContentScroll="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
      <ns:SelectableTextBlock TextWrapping="NoWrap" x:Name="stb" TextSelected="stb_TextSelected"/>
</ScrollViewer>

这确保滚动条的存在可以存储更长的文本及其文本。缺少较短的。请参阅this post

2)选择并复制/粘贴。请参阅this post,尤其是this answerThis piece of code on Rextester表示对该示例的修改,自定义可选TextBlock,其中选择突出显示来回。

3)样式和绑定InlineCollection。将引文模型绑定到TextBlock.Inlines的各种方法,例如herehere