6

Đoạn mã sau ném một System.ArgumentException bí mật từ phương thức RenderAsync "Giá trị không nằm trong phạm vi dự kiến." Nếu mặt khác, Canvas của tôi là một phần của cây XAML hiển thị mà nó hoạt động. Không thể hiển thị một số XAML không được hiển thị trên màn hình?Trong WinRT C# làm thế nào để lưu một cây XAML ngoài màn hình bằng cách sử dụng RenderTargetBitmap?

Canvas c = new Canvas(); 
c.Width = 40; 
c.Height = 40; 
c.Background = new SolidColorBrush(Color.FromArgb(0xff, 0x80, 0xff, 0x80)); 

RenderTargetBitmap x = new RenderTargetBitmap(); 
await x.RenderAsync(c); 

tôi gần như nghĩ rằng câu trả lời này sẽ làm việc, nhưng không có may mắn, tôi đoán nó chỉ áp dụng cho WPF: Create WPF element offscreen and render to bitmap

UPDATE:

Cho đến nay ý tưởng tốt nhất của tôi là để đặt Canvas Tôi muốn hiển thị vào trang hiện có nhưng đặt nó bên dưới thông thường là UIElement gốc lấp đầy màn hình để người dùng không thể nhìn thấy màn hình:

<Grid> 
    <Canvas x:Name="HiddenCanvas"/> 
    <Grid x:Name="mainElement" Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> 
    </Grid> 
</Grid> 

Nó không đẹp nhưng nó có vẻ hoạt động. Cho phép xem liệu có ai có thể làm tốt hơn các giải pháp

Trả lời

1

satur9nine để đưa cây giao diện người dùng được hiển thị ở đâu đó phía sau mặt tiền mờ đục dường như là giải pháp được hỗ trợ duy nhất. Bạn cũng có thể fiddle với opacity của yếu tố cha mẹ để tránh có nó hiển thị. Một tùy chọn khác là tự render nó bằng Direct2D hoặc sử dụng một cái gì đó giống như các phương thức WinRTXamlToolkit.Composition.Render() từ Bộ công cụ WinRT XAML.

1

WinRTXamlToolkit.Composition không gian tên có tiện ích này hoạt động. Chỉ cần gọi phương thức này:

await WriteableBitmapRenderExtensions.RenderToPngStream(element);