Tôi đang viết ứng dụng giao diện điều khiển phía máy chủ trong C# /. Net 4.5 nhận dữ liệu và tạo hình ảnh biểu đồ tĩnh được lưu bởi máy chủ web.Hiển thị phía máy chủ của WPF UserControl
tôi chủ yếu sử dụng phương pháp này được mô tả ở đây: http://lordzoltan.blogspot.com/2010/09/using-wpf-to-render-bitmaps.html
Tuy nhiên, tôi đã thêm một mainContainer.UpdateLayout(); sau khi sắp xếp() sao cho các databindings sẽ cập nhật và hiển thị trong ảnh đã render, cũng như một Measure() trước khi nó cho tốt ... ah, tôi sẽ không đến đó.
Dưới đây là phương pháp mà không được vẽ:
void RenderAndSave(UIElement target, string filename, int width, int height)
{
var mainContainer = new Grid
{
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch
};
mainContainer.Children.Add(target);
mainContainer.Measure(new Size(width, height));
mainContainer.Arrange(new Rect(0, 0, width, height));
mainContainer.UpdateLayout();
var encoder = new PngBitmapEncoder();
var render = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
render.Render(mainContainer);
encoder.Frames.Add(BitmapFrame.Create(render));
using (var s = File.Open(filename, FileMode.Create))
{
encoder.Save(s);
}
}
Các tham số mục tiêu để phương pháp này sẽ là một thể hiện của một WPF/XAML UserControl tôi đã thực hiện - khá đơn giản vào thời điểm này, chỉ cần một mạng lưới với một số text databinding đến một đối tượng ViewModel mà tôi đã gán cho DataContext.
Hình ảnh đã lưu trên đĩa có vẻ là ngoại lệ tốt cho đối tượng Lô đất OxyPlot - nó hoàn toàn màu trắng.
Bây giờ, khi tôi ở trong nhà thiết kế trong Visual Studio 2013, tôi có thể thấy nó. Tôi đã thêm một DataContext thời gian thiết kế giống như đối tượng mà tôi sử dụng khi chạy (đây là một spike tôi đang làm - viewmodel không ở dạng cuối cùng của nó, chỉ có một bó dữ liệu mặc định trong khi tôi tìm ra). Trong nhà thiết kế, tôi thấy biểu đồ như OxyPlot vẽ nó.
Có điều gì đặc biệt mà tôi cần làm để có được kết xuất cũng chứa biểu đồ OxyPlot này không? Nó là nhiều hơn hoặc ít hơn điểm của tập thể dục vì vậy nó sẽ là tuyệt vời để thực sự làm cho nó hiển thị!
Cảm ơn trước vì bất kỳ thông tin chi tiết và đề xuất nào!
Givens mảng rộng các nền tảng được hỗ trợ, tôi sẽ nghi ngờ rằng vấn đề là ở cách thức kiểm soát OxyPlot WPF đã được thực hiện. Có lẽ nó là một điều khiển WinForms nhúng trong một điều khiển WPF, có thể có vấn đề. Tôi không biết liệu điều đó có giúp ích gì không. –
Bạn có thể đúng về điều này, tất nhiên - có khả năng là không có cách nào để làm điều này mà không có sự kiểm soát tồn tại trong một môi trường WPF đầy đủ. Trong trường hợp đó, tôi sẽ đi tìm một thành phần biểu đồ khác.Tuy nhiên, nếu tôi chỉ có thể tìm hiểu những gì các nhà thiết kế làm tôi không, sau đó tôi hy vọng rằng tôi có thể kích hoạt nó để sơn chính nó .. –
@swiszcz: Bạn có thể giải thích tại sao các câu trả lời được cung cấp ở đây sẽ không làm việc cho bạn? –