0

我有 Telerik RadRichTextBox。这里是设计

<telerik:RadRichTextBox Name="radRchTxtBoxEdit" HorizontalAlignment="Stretch"  
VerticalAlignment="Top" BorderBrush="Black" BorderThickness="1" Background="White"
LayoutMode="Flow" IsSpellCheckingEnabled="False" TextInput="radRchTxtBoxEdit_TextInput"> 

我想要富文本框内容的快照。有没有办法拍摄 RichTextBox 的快照?

4

2 回答 2

0

使用 PrintDocument 类,您可以获取(快照/打印)任何 UIElement 或控件。声明 PrintDocument,在 PrintPage Event 中将 RadRichTextBox 分配给 PageVisual。(即 e.PrintPage = radRchTxtBoxEdit)。

这是帮助您入门的链接。

http://msdn.microsoft.com/en-us/library/system.windows.printing.printdocument%28v=vs.95%29.aspx

于 2012-08-01T15:06:29.010 回答
0

假设您要将文档另存为图像,然后对其进行处理。以下应该工作。

您可以使用以下方法从任何 UIElement 生成位图:

WriteableBitmap GetImageForUIElement(UIElement source)
{
    WriteableBitmap bmp = new WriteableBitmap(source, null);
    bmp.Invalidate();

    return bmp;
}

然而,仅仅feeding your RadRichTextBox控制这种方法是不够的,因为它will just create an image of the visible area

To generate the whole page,你必须深入到Visual TreeRadRichTextBox 控件中才能找到DocumentPagePresenter

这将有助于找到正确的子控件:

T GetDescendent<T>(DependencyObject root) where T : DependencyObject
{
    int children = VisualTreeHelper.GetChildrenCount(root);
    for (int i = 0; i < children; i++)
    {
        var element = VisualTreeHelper.GetChild(root, i);
        if (element is T)
        {
            return (T)element;

        }
        else
        {
            element = GetDescendent<T>(element);
            if (element != null)
            {
                return (T)element;
            }
        }
    }

    return null;
}

WritableBitmap 可以直接用作 Image 控件的 Source,但是没有本地方法可以将此对象转换为文件系统对象,但是有一些选项。

  1. 您可以将原始像素数据发送到 Web 服务并在那里进行保存。(WriteableBitmap.Pixels)
  2. 查看此答案以了解保存为其他图像格式的方法

...

为了获得完整的答案:这里有一些 XAML 可供查看(直接来自 Telerik)

<telerik:RadRichTextBox x:Name="MyRichTextBox" >
    <telerik:RadDocument LayoutMode="Paged">
        <telerik:Section PageMargin="10, 10, 10, 10">
            <telerik:Paragraph>
                <telerik:ImageInline Width="236" Height="50" UriSource="/Silverlight.Help.RadRichTextBoxSamples;component/Demos/Images/RadRichTextBox.png" />
            </telerik:Paragraph>
            <telerik:Paragraph TextAlignment="Center">
                <telerik:Span Text="Thank you for choosing Telerik" />
                <telerik:Span FontWeight="Bold" Text=" RadRichTextBox!" />
            </telerik:Paragraph>
            <telerik:Paragraph>
                <telerik:Span FontWeight="Bold" Text="RadRichTextBox" />
                <telerik:Span Text=" is a control that is able to display and edit rich-text content including formatted text arranged in pages, paragraphs, spans (runs) etc." />
            </telerik:Paragraph>
            <telerik:Table LayoutMode="AutoFit">
                <telerik:TableRow>
                    <telerik:TableCell>
                        <telerik:Paragraph>
                            <telerik:Span Text="Cell 1" />
                        </telerik:Paragraph>
                    </telerik:TableCell>
                    <telerik:TableCell>
                        <telerik:Paragraph>
                            <telerik:Span Text="Cell 2" />
                        </telerik:Paragraph>
                    </telerik:TableCell>
                </telerik:TableRow>
                <telerik:TableRow>
                    <telerik:TableCell ColumnSpan="2">
                        <telerik:Paragraph>
                            <telerik:Span Text="Cell 3" />
                        </telerik:Paragraph>
                    </telerik:TableCell>
                </telerik:TableRow>
            </telerik:Table>
        </telerik:Section>
    </telerik:RadDocument>

</telerik:RadRichTextBox>
<Image x:Name="MyRichTextImage" />
<Button HorizontalAlignment="Right" VerticalAlignment="Bottom" Content="Click" Click="Button_Click" />

这是按钮点击处理程序

private void Button_Click(object sender, RoutedEventArgs e)
{
    DocumentPagePresenter doc = GetDescendent<DocumentPagePresenter>(MyRichTextBox);

    if (doc != null)
    {
        MyRichTextImage.Source = GetImageForUIElement(doc);
    }
}
于 2012-08-02T20:37:15.520 回答