首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程FlowDocument

多线程FlowDocument
EN

Stack Overflow用户
提问于 2018-07-30 03:38:18
回答 1查看 161关注 0票数 1

当我在单独的线程中运行FlowDoc时,我得到了异常,即使使用dispatcher invok也不能解决问题。我读了一些关于将flowdoc序列化为xdoc并重新序列化的文章,但这听起来有点麻烦。这个问题我已经解决了两天了,我的头都裂了,请帮帮忙:)

下面是我后面的代码

代码语言:javascript
复制
 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绑定到了文档属性:

代码语言:javascript
复制
<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" />

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-30 15:16:22

好的,坏消息是RTB不直接支持数据绑定。MSDN网站上有一个页面解释了他们为什么这样做,但无论哪种方式,这都是一个经过深思熟虑的设计决定。

据我所知,你有两个选择。第一个是推出你自己的解决方案。这基本上涉及到为您想要显示的所有项目类型创建视图模型,在视图模型中维护它们的集合,并使用行为绑定到它并填充RTB。您的行为还必须手动设置绑定,即,而不是这样:

代码语言:javascript
复制
para.Inlines.Add(new Bold(new Run("This is a Title \n")));

相反,...you会这样做:

代码语言:javascript
复制
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));

本例中的...which为text属性添加了一个绑定。如果正确实现,这将允许您在加载时在GUI线程中创建文档本身,然后允许您在任何您喜欢的线程中更新文本、颜色等的视图模型属性,而不必重新创建整个文档。

第二种选择是使用其他人已经为您完成此工作的库,为此,我建议您查看WPF Tookkit's implementation of a bindable RichTextBox

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51583904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档