有什么办法可以使WPF文本块成为可选的?

时间:2020-03-06 14:45:10  来源:igfitidea点击:

我想使显示在Witty(一个开源Twitter客户端)中的文本成为可选择的。当前使用自定义文本块显示它。我需要使用TextBlock,因为我正在使用textblock的内联来显示@username和链接并设置为超链接格式。一个常见的请求是能够复制粘贴文本。为此,我需要选择TextBlock。

我试图通过使用只读的TextBox来显示文本,使其看起来像文本块,从而使其正常工作,但由于TextBox没有内联,因此在我的情况下将无法正常工作。换句话说,我无法像使用TextBlock一样单独设置文本框内文本的样式或者格式。

有任何想法吗?

解决方案

我不确定是否可以将TextBlock设为可选,但是另一种选择是使用RichTextBox,它就像我们建议的TextBox一样,但是支持所需的格式。

为TextBlock创建ControlTemplate并在其中放置一个具有只读属性集的TextBox。
或者仅使用TextBox并将其设置为只读,然后可以更改TextBox.Style以使其看起来像TextBlock。

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

有一种替代解决方案可能适用于此博客文章中提到的RichTextBox,当用户将鼠标悬停在控件上时,它会使用触发器来换出控件模板,从而有助于提高性能。

new TextBox
{
   Text = text,
   TextAlignment = TextAlignment.Center,
   TextWrapping = TextWrapping.Wrap,
   IsReadOnly = true,
   Background = Brushes.Transparent,
   BorderThickness = new Thickness()
         {
             Top = 0,
             Bottom = 0,
             Left = 0,
             Right = 0
         }
};