具有Rich Text、No Word Wrap和Selectable Text的WPF控件



我需要一个能够选择内部显示的文本(只读)的控件,但我也需要能够用粗体和斜体格式化文本,因为这是一篇期刊引文。此外,我希望控件能够根据文本或内容(拉伸)调整大小。这里有一个例子:

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

我能得到的最接近的是下面这个例子的RichTextBox。这个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等的按钮)知之甚少。我似乎找不到一个具有我需要的三个属性的控件,也找不到自定义控件以实现我想要的功能的方法。有什么想法吗?

我会选择自定义TextBlockRichTextBox似乎有些过头了。

1) 滚动和调整

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

这样可以确保较长文本显示滚动条,较短文本显示不显示滚动条。请参阅此帖子。

2) 选择并复制/粘贴。看看这篇文章,尤其是这个答案。Rextester上的这段代码代表了对该示例的修改,即一个自定义的可选择TextBlock,带有来回切换的选择高亮显示。

3) InlineCollection。将引用模型绑定到TextBlock.Inlines的各种方法,如此处或此处。

最新更新