假设您要将文档另存为图像,然后对其进行处理。以下应该工作。
您可以使用以下方法从任何 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 Tree
RadRichTextBox 控件中才能找到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,但是没有本地方法可以将此对象转换为文件系统对象,但是有一些选项。
- 您可以将原始像素数据发送到 Web 服务并在那里进行保存。(WriteableBitmap.Pixels)
- 查看此答案以了解保存为其他图像格式的方法
...
为了获得完整的答案:这里有一些 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);
}
}