ドキュメントを画像として保存し、それを使って何かをしたいとします。以下はうまくいくはずです。
以下を使用して、任意の 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 コントロールのソースとして直接使用できますが、このオブジェクトをファイル システム オブジェクトに変換するネイティブな方法はありませんが、いくつかのオプションがあります。
- 生のピクセル データを 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);
}
}