c# - 如何在类似标签的控件中显示简短的只读 FlowDocument

标签 c# wpf .net-3.5 label flowdocument

我正在寻找一种在类似标签的控件中呈现短 FlowDocument 字符串的方法。

在 WPF 中,用户可以将文本输入到 RichTextBox 中。结果是一个 FlowDocument 字符串。 我正在寻找一种在 Label 中显示该文本的方法,其中:

  1. 用户不应该能够编辑或选择(使用鼠标)文本。
  2. 不应有滚动条 - 就像在普通标签中一样,控件应展开以容纳所有文本。
  3. 如果鼠标在标签上时用户滚动,则应滚动的控件是该控件的父控件
  4. 控件应尽可能轻量级。

我有以下继承 FlowDocumentScrollViewer 的实现,但我确信必须有更好的实现(可能继承除 FlowDocumentScrollViewer 之外的其他控件)。

public class FlowDocumentViewer : FlowDocumentScrollViewer
{
    public FlowDocumentViewer()
    {
        this.SetValue(ScrollViewer.CanContentScrollProperty, false);
        this.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Hidden);
        this.Padding = new Thickness(-17);
        this.Document = new FlowDocument();
    }

    protected override void OnMouseWheel(MouseWheelEventArgs e)
    {
        e.Handled = false;
    }

    public string Text
    {
        get { return (string)GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(string), typeof(FlowDocumentViewer), new UIPropertyMetadata(string.Empty, TextChangedHandler));

    private static void TextChangedHandler(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (e.NewValue.Equals(string.Empty))
            return;
        FlowDocumentViewer fdv = (FlowDocumentViewer)d;
        fdv.Document.Blocks.Clear();

        using (MemoryStream stream = new MemoryStream(UTF8Encoding.UTF8.GetBytes(e.NewValue.ToString())))
        {
            Section content = XamlReader.Load(stream) as Section;
            fdv.Document.Blocks.Add(content);
        }
    }
}

最佳答案

您是否尝试过设置 IsReadOnly?

    <RichTextBox  IsReadOnly="True"/>

关于c# - 如何在类似标签的控件中显示简短的只读 FlowDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680461/

相关文章:

c# - 将此委托(delegate)转换为匿名方法或 lambda

c# - Entity Framework 使用模型与 sqlce 和 sql server/sql express 数据库

c# - 组框的动画高度从 0 到自动

wpf - 使用我的自定义面板设置 ItemsControl 中的项目的附加属性在 WPF 中不起作用

c# - 如何还原最小/隐藏窗口?

c# - 如何在对 C# .NET 3.5 服务器进行 DCOM 调用时可靠地检查客户端身份?

c# - 显示生成的文本时 <% : . .. %> 与 <%= %> 的问题

c# - CurrentDomain.UnhandledException 未在 Windows 服务中抛出

c# - 将 DataGridView 的 DataSource 设置为 null/false 会删除 DataGridView 的所有默认设置

c# - 在枚举选择中返回索引