7

我知道TextBlock可以呈现一个FlowDocument,例如:

<TextBlock Name="txtFont">
     <Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run>
</TextBlock>

我想知道如何将FlowDocument存储在变量中的 a 设置为 a TextBlock。我正在寻找类似的东西:

string text = "<Run Foreground="Maroon" FontFamily="Courier New" FontSize="24">Courier New 24</Run>"
txtFont.Text = text;

但是,上述代码的结果是 XAML 文本未解析。


编辑:我想我的问题还不够清楚。我真正想要实现的是:

  1. 用户将一些文本输入到RichTextBox中。
  2. 应用程序将用户输入保存为FlowDocument来自RichTextBox,并将其序列化到磁盘。
  3. FlowDocument从磁盘反序列化为变量text
  4. 现在,我希望能够以TextBlock.

因此,据我了解,创建一个新的Run对象并手动设置参数并不能解决我的问题。


问题是序列化RichTextBox会创建Section对象,我无法将其添加到TextBlock.Inlines。因此,无法将反序列化的对象设置为TextBlock的TextProperty

4

4 回答 4

5

创建并添加对象如下:

        Run run = new Run("Courier New 24");
        run.Foreground = new SolidColorBrush(Colors.Maroon);
        run.FontFamily = new FontFamily("Courier New");
        run.FontSize = 24;
        txtFont.Inlines.Add(run);
于 2009-11-04T11:37:37.577 回答
3

我知道 TextBlock 可以呈现 FlowDocument

什么让你有那个想法 ?我不认为这是真的...... a 的内容TextBlockInlines属性,它是一个InlineCollection. 所以它只能包含Inlines... 但是在 aFlowDocument中,内容是Blocks属性,其中包含 的实例Block。并且 aBlock不是Inline

于 2009-11-04T13:12:43.453 回答
0

下面是我们如何通过动态分配样式来设置文本块的外观。

    // Set Weight (Property setting is a string like "Bold")
    FontWeight thisWeight = (FontWeight)new FontWeightConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontWeightValue);

    // Set Color (Property setting is a string like "Red" or "Black")
    SolidColorBrush thisColor = (SolidColorBrush)new BrushConverter().ConvertFromString(Properties.Settings.Default.DealerMessageFontColorValue);

    // Set the style for the dealer message
    // Font Family Property setting  is a string like "Arial"
    // Font Size Property setting is an int like 12, a double would also work
    Style newStyle = new Style
    {
        TargetType = typeof(TextBlock),
        Setters = {
            new Setter 
            {
                Property = Control.FontFamilyProperty,
                Value = new FontFamily(Properties.Settings.Default.DealerMessageFontValue)
            },
            new Setter
            {
                Property = Control.FontSizeProperty,
                Value = Properties.Settings.Default.DealerMessageFontSizeValue
            },
            new Setter
            {
                Property = Control.FontWeightProperty,
                Value = thisWeight
            },
            new Setter
            {
                Property = Control.ForegroundProperty,
                Value = thisColor
            }
        }
    };

    textBlock_DealerMessage.Style = newStyle;

您可以消除样式部分并直接设置属性,但我们喜欢将内容捆绑在样式中,以帮助我们在整个项目中组织外观。

textBlock_DealerMessage.FontWeight = thisWeight;

HTH。

于 2011-05-02T00:04:58.100 回答
0

如果您的FlowDocument已被反序列化,则意味着您有一个类型的对象FlowDocument,对吗?尝试将 TextBlock 的 Text 属性设置为此值。当然,您不能使用 来执行此操作txtFont.Text = ...,因为这仅适用于字符串。对于其他类型的对象,需要直接设置DependencyProperty:

txtFont.SetValue(TextBlock.TextProperty, myFlowDocument)
于 2009-11-04T12:39:28.463 回答