代码之家  ›  专栏  ›  技术社区  ›  Erwin Draconis

多线程流程文档

  •  1
  • Erwin Draconis  · 技术社区  · 6 年前

    当我在单独的线程中运行FlowDoc时,即使使用Dispatcher Invoke,也无法解决问题。 我读了一些关于将flowDoc序列化为xDoc并进行序列化的文章,但听起来有点麻烦。 我有这个问题已经两天了,我的头都裂了,请帮忙:)

    这是我的密码

     new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                for (int i = 0; i < 10; i++)
                {
                     mcFlowDoc = new FlowDocument();
                     // Create a paragraph with text
                     Paragraph para = new Paragraph();
                     para.Inlines.Add(new Bold(new Run("This is a Title \n")));
                     para.Inlines.Add(new Run("I am a flow document. Would you like to edit me? \n"));
    
                     Dispatcher.CurrentDispatcher.Invoke((Action)(() =>
                     {
                        mcFlowDoc.Blocks.Add(para);
                     }));
                }
            }).Start();
    

    然后是我的xaml,我只使用了一个普通的richtextbox并将flowdoc绑定到document属性:

    <fsrtb:FsRichTextBox x:Name="EditBox" Document="{Binding mcFlowDoc}" Grid.Row="0" Margin="10,10,10,91" ToolbarBackground="#FFD2CB84" ToolbarBorderBrush="#FFC6BE75" ToolbarBorderThickness="1,1,1,0" CodeControlsVisibility="Collapsed" />
    

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mark Feldman    6 年前

    para.Inlines.Add(new Bold(new Run("This is a Title \n")));
    

    var binding = new Binding
    {
        Path = new PropertyPath("BackgroundProperty"),
        Mode = BindingMode.OneWay,
        UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
        };
    var run = new Run();
    BindingOperations.SetBinding(run, Run.TextProperty, binding);
    para.Inlines.Add(new Bold(run));
    

    WPF Tookkit's implementation of a bindable RichTextBox