2012-04-18 2 views
0

Я пытаюсь отобразить диаграмму Visiblox для изображения, чтобы показывать сотни из них одновременно. График генерируется в коде и отображается без его отображения.RenderTargetBitmap отображает пустой элемент управления, если он не установлен в окне (диаграмма Visiblox)

Проблема, с которой я сталкиваюсь, заключается в том, что после ее отображения диаграмма выглядит пустой. Верхний элемент управления - это диаграмма, нижняя - диаграмма, отображаемая перед добавлением ее в элемент управления. Некоторое рендеринг выполняется, так как есть водяной знак.

Диаграмма заполняется с использованием привязок и datacontext (на всякий случай это важно). Глядя на диаграмму перед рендерингом, она выглядит так, как будто она пуста, спасибо заставляет меня спросить «Когда привязки получены с помощью UserControl?».

И это код, я использую, чтобы сделать изображение:

public BitmapSource Render(FrameworkElement control) 
    { 
     if (control == null) 
     { 
      throw new ArgumentNullException("control"); 
     } 

     control.UpdateLayout(); 

     Viewbox viewBox = new Viewbox(); 
     viewBox.Child = control; // Control to render 
     viewBox.Measure(new System.Windows.Size(control.Width, control.Height)); 
     viewBox.Arrange(new Rect(0, 0, control.Width, control.Height)); 
     viewBox.ApplyTemplate(); 
     viewBox.UpdateLayout(); 

     RenderTargetBitmap renderer = new RenderTargetBitmap((int)(control.Width * _dpiX/96.0), (int)(control.Height * _dpiY/96.0), _dpiX, _dpiY, PixelFormats.Pbgra32); 

     DrawingVisual drawingVisual = new DrawingVisual(); 
     using (DrawingContext drawingContext = drawingVisual.RenderOpen()) 
     { 
      VisualBrush visualBrush = new VisualBrush(viewBox); 
      drawingContext.DrawRectangle(visualBrush, null, new Rect(new Point(), new System.Windows.Size(control.Width, control.Height))); 
     } 

     renderer.Render(drawingVisual); 

     // Remove the container to be able to reuse the control again if we appended it to a viewbox 
     viewBox.Child = null; 

     return renderer; 
    } 

enter image description here

ответ

1

Если вы заинтересованы в сохранении диаграммы Visiblox к изображению, есть некоторые примеры кода, по меньшей блог Visiblox. Вы можете найти статью здесь - http://www.visiblox.com/blog/2011/09/saving-a-chart-as-an-image

В статье описывается, как экспортировать изображение в Silverlight, но загрузка содержит пример кода, который показывает, как это сделать в WPF.

Ранее я использовал эту технику в своих приложениях, и я всегда обнаружил, что использование этого образца кода было лучшим местом для начала!

Сообщите мне, если это не сработает для вас - у меня есть большой опыт в этом! Мои советы состоят в том, чтобы убедиться, что вы набрали Invalidate() на графике в нужное время и убедитесь, что его макет был обновлен до того, как вы попытаетесь его экспортировать.

+0

Удивительно, я не читал это, поскольку меня не было в Silverlight. Благодаря! –

+0

Рад, что я мог помочь! –

+0

В любом случае, это не исправление моей проблемы с данными привязки. Как я привязываю, похоже, что привязки не обрабатываются до тех пор, пока элемент управления не будет загружен правильно? –