Tôi đã gặp khó khăn khi in bằng cách sử dụng không gian tên System.Printing
. Cuối cùng tôi đã tìm ra rằng lý do tôi nhận được kết quả trống khi sử dụng các phần của API là do các đối tượng Visual
mà tôi đang cố gắng in không được Nạp/Khởi tạo. Nếu tôi hiển thị các đối tượng Visual
bằng cách đặt chúng vào một kích thước thích hợp Window
s và gọi Show()
trước khi in, sau đó tôi nhận được kết quả mong đợi.Cách thích hợp để buộc tải một hình ảnh WPF
Như vậy, workaround tôi đã đưa ra là để gọi phương pháp này cho tất cả các trực quan
public static void ShowVisual(Visual visual)
{
Window window = new Window
{
Content = visual,
SizeToContent = SizeToContent.WidthAndHeight,
Visibility = Visibility.Hidden
};
window.Show();
window.Close();
}
Điều này có vẻ giống như một hack, đặc biệt là kể từ khi người dùng thấy một thời gian ngắn hòa Window-frame. Tôi nghĩ rằng phải có một cách khác mà nó được cho là phải làm. Tuy nhiên, tôi không bật lên bất kỳ giải pháp nào khác. Đang sử dụng một cửa sổ ẩn thực sự những gì được cho là phải được thực hiện ở đây?
Sử dụng MenuItem như mô tả tại WPF - Get size of UIElement in Memory? không hoạt động. Tôi nhìn vào Force rendering of a WPF control in memory nhưng tôi không thực sự muốn hiển thị trực quan đến một bitmap mà có vẻ là những gì được cho. Gọi số ApplyTemplate()
trên số Image
như được mô tả trong wpf force to build visual tree không giúp được gì.
EDIT: Đây là giải pháp được sử dụng thay vì ShowVisual
từ trên
/// <remarks>
/// This method needs to be called in order for
// the element to print visibly at the correct size.
/// </remarks>
private static void ArrangeElement(UIElement element)
{
var box = new Viewbox {Child = element};
box.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
box.Arrange(new Rect(box.DesiredSize));
}
Cảm ơn thông tin. Tôi không thể tìm thấy một lớp 'ViewPort' nhưng cuối cùng bạn đã dẫn tôi đến giải pháp. Tôi đã thử câu trả lời tại [Lấy kích thước của UIElement trong bộ nhớ] (http://stackoverflow.com/a/4890217/1072626) một lần nữa nhưng sử dụng một 'StackPanel' thay vì' MenuItem' chỉ vì'StackPanel' có 'Viewport {Height | Width} 'thành viên. Điều đó hiệu quả. – vossad01
Rất tiếc, tôi xin lỗi vì tôi muốn nói 'Viewbox'. Có một cách viết hữu ích [lên đây] (http://wpftutorial.net/ViewBox.html). Vui mừng bạn đã nhận nó được sắp xếp mặc dù. – Jammer