Сохранить XAML в png с помощью viewbox? - PullRequest
1 голос
/ 22 февраля 2012

У меня есть простая форма с многострочным текстовым полем.

тогда у меня есть этот код:

using (Stream stream = new MemoryStream())
{
    using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
    {
        writer.WriteLine(textBox1.Text);
        writer.Flush();
        stream.Position = 0;
        FrameworkElement element = XamlReader.Load(stream) as FrameworkElement;


        Size renderingSize = new Size(128, 128);
        element.Measure(renderingSize);
        Rect renderingRectangle = new Rect(renderingSize);
        element.Arrange(renderingRectangle);
        element.UpdateLayout();

        Rect bounds = VisualTreeHelper.GetDescendantBounds(element);
        RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)element.ActualWidth,
            (int)element.ActualHeight,
            96, 96, PixelFormats.Pbgra32);

        DrawingVisual visual = new DrawingVisual();
        using (DrawingContext context = visual.RenderOpen())
        {
            VisualBrush brush = new VisualBrush(element);
            context.DrawRectangle(brush, null, new Rect(new Point(), bounds.Size));
        }
        renderBitmap.Render(visual);
        try
        {
            PngBitmapEncoder enc = new PngBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(renderBitmap));
            using (Stream outputStream = File.OpenWrite(@"T:\test.png"))
            {
                enc.Save(outputStream);
            }
        }
        catch (ObjectDisposedException)
        {
            // IF the operation lasted too long, the object might be disposed already
        }
    }
}

А содержимое моего текстового поля1 следующее

<?xml version="1.0" encoding="utf-8"?>
<Viewbox xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Canvas Width="48" Height="48" Clip="F1 M 0,0L 48,0L 48,48L 0,48L 0,0">
    <Path Width="24" Height="24" Canvas.Left="12" Canvas.Top="12" Stretch="Fill" Fill="#FF000000" Data="F1 M 22,12L 26,12L 26,22L 36,22L 36,26L 26,26L 26,36L 22,36L 22,26L 12,26L 12,22L 22,22L 22,12 Z "/>
  </Canvas>
</Viewbox>

Если я запускаю этот код, окно просмотра больше не действует, но если я возьму этот код xaml и вставлю код в смесь выражений (удаляя заголовок xml), то я получу нужный результат (содержимое заполняет весь текст) экран).

Так почему в моем коде не работает viewbox, чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...