我需要一个能够选择里面显示的文本的控件(只读),但我还需要能够用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的新手,并且对如何编辑某些控件知之甚少,例如使用OverridesDefaultStyle
,ControlTemplate
等按钮。我只是不能这样做似乎找到了一个具有我需要的三个属性的控件,或者一种控件可以自定义以实现我想要的方式。有什么想法吗?
答案 0 :(得分:1)
我会选择自定义TextBlock
。 RichTextBox
似乎有点矫枉过正。
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 answer。 This piece of code on Rextester表示对该示例的修改,自定义可选TextBlock
,其中选择突出显示来回。
3)样式和绑定InlineCollection
。将引文模型绑定到TextBlock.Inlines
的各种方法,例如here或here。