2010-08-31 21 views
7

Ứng dụng của chúng tôi có một số đối tượng trên canvas; canvas được chứa trong trình xem cuộn. Chúng tôi cũng có điều khiển thanh trượt và một số nút, luôn nằm ở đầu cửa sổ.
Tôi đang cố gắng in ứng dụng bằng cách chụp một bitmap của ứng dụng, nhưng không có bất kỳ 'trang trí' nào - thanh trượt, nút hoặc thanh cuộn.SL 4 - Buộc vẽ lại cây trực quan

 _scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; 
     _scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; 
     var s = xSlider; 
     s.Visibility = Visibility.Collapsed; 
     var b = xPlusButton; 
     b.Visibility = Visibility.Collapsed; 
     b = xMinusButton; 
     b.Visibility = Visibility.Collapsed; 

     b = xButton; 
     b.Visibility = Visibility.Collapsed; 

Thanh trượt và nút được ẩn, như mong đợi, nhưng thanh cuộn không được.
Tôi nghi ngờ ứng dụng cần vẽ lại bố cục để ẩn thanh cuộn. Có cách nào để thực hiện điều đó không? Điều này được thực hiện phức tạp hơn bởi thực tế là thao tác in trong SL 4 phải được khởi tạo bởi một cử chỉ UI; không có cách nào (AFAIK) để bắt đầu lập trình, do đó việc vẽ lại này phải xảy ra ở một trong các trình xử lý sự kiện PrintDocument.

Thanks cho bất kỳ lời đề nghị ....

+0

Bạn có thể hiển thị Xaml Canvas mà bạn đang in không? Nhận xét "chụp ảnh bitmap" có vẻ hơi lệch, bạn có thể phấn khởi không? – AnthonyWJones

+0

Tôi thực sự không thể hiển thị xaml, vì tất cả các đối tượng được thêm vào trong thời gian chạy và sử dụng nhiều mẫu. Tôi tin rằng đó là các mẫu gây ra sự nghịch ngợm; sau khi chuyển Canvas đến PrintDocument, cây không bao giờ được vẽ lại (ít nhất là không hoàn toàn). Điều gì xuất hiện khi đầu ra in là rất nhiều đối tượng bị thiếu hoặc không hoàn toàn được vẽ. Chúng tôi đang cố gắng chụp một bitmap của Canvas để khắc phục vấn đề đối tượng được vẽ không đầy đủ. – Number8

+0

Bạn có thể đăng mã bitmap chụp được không? –

Trả lời

7

Hãy thử sau,

canvas.InvalidateMeasure(); 
canvas.InvalidateArrange(); 

Hoặc bạn có thể sử dụng WritableBitmap để chụp ảnh thời gian chạy và gửi hình ảnh để in tài liệu nếu trong trường hợp in tài liệu được bỏ qua render transform .

Ngoài ra nếu bạn đang sử dụng WritableBitmap để nắm bắt phần tử thì bạn nên cung cấp cho RenderTransform làm đối số thứ hai. Bạn có thể đăng mã để chụp màn hình không?

+0

Hãy đánh dấu phần này là câu trả lời nếu nó giúp bạn. –

+0

+1 để làm đúng! Đây chính xác là những gì tôi cần để bắt đầu sự kiện LayouUpdated. – dFlat

2

Ngoài các phương pháp InvalidateMeasure và InvalidateArrange, theo đề xuất của Akash, bạn có thể thử phương thức UpdateLayout.

Hai phương pháp không hợp lệ sẽ đánh dấu biện pháp của biện pháp kiểm soát hoặc sắp xếp khi cần thực hiện lại, nhưng không nhất thiết phải thực hiện ngay. UpdateLayout sẽ buộc nó thực hiện một số cập nhật ngay lập tức.

Đó là một chút của hộp đen, vì vậy bạn có thể cần phải vô hiệu hóa rồi gọi UpdateLayout. Đôi khi bạn có thể chỉ cần gọi UpdateLayout.

Các vấn đề liên quan