我需要一个能够选择内部显示的文本(只读)的控件,但我也需要能够用粗体和斜体格式化文本,因为这是一篇期刊引文。此外,我希望控件能够根据文本或内容(拉伸)调整大小。这里有一个例子:
儿童和家庭行为治疗 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还很陌生,对如何编辑一些控件(如使用OverridesDefaultStyle
、ControlTemplate
等的按钮)知之甚少。我似乎找不到一个具有我需要的三个属性的控件,也找不到自定义控件以实现我想要的功能的方法。有什么想法吗?
我会选择自定义TextBlock
。RichTextBox
似乎有些过头了。
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
的各种方法,如此处或此处。