如何上传RadRichTextBox的内容

时间:2012-08-01 13:22:11

标签: silverlight

我有Telerik RadRichTextBox。这是设计

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

我想要Rich Text Box内容的快照。有没有办法拍摄RichTextBox的快照?

2 个答案:

答案 0 :(得分:0)

使用PrintDocument类可以拍摄(快照/打印)任何UIElement或Control。声明PrintDocument,将RadRichTextBox分配给PrintPage Event中的PageVisual。(即e.PrintPage = radRchTxtBoxEdit)。

以下是帮助您入门的链接。

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

答案 1 :(得分: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,您必须深入研究RadRichTextBox控件的Visual Tree才能找到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. 您可以将原始像素数据发送到网络服务并在那里保存。 (WriteableBitmap.Pixels)
  2. 结帐this answer了解保存为其他图片格式的方法
  3. ...

    为了得到完整答案: 这是查看(Straight from Telerik)

    的一些XAML
    <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);
        }
    }