6

Następujący kod rzuca tajemniczy wyjątek System.ArgumentException z metody RenderAsync "Wartość nie mieści się w oczekiwanym zakresie." Jeśli z drugiej strony moje płótno jest częścią widocznego drzewa XAML, to działa. Czy nie można renderować niektórych XAML, które nie są wyświetlane na ekranie?W WinRT C# jak zapisać drzewo XAML poza ekranem przy użyciu 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); 

prawie, że to odpowiedź będzie działać, ale bez powodzenia, myślę, że odnosi się tylko do WPF: Create WPF element offscreen and render to bitmap

UPDATE:

tej pory mój najlepszy pomysł jest umieszczenie płótna Chcę renderować na aktualnie widoczną stronę, ale umieszczam ją poniżej tego, co zwykle jest przyczyną UIElement, która wypełnia ekran, więc nie jest widoczna dla użytkownika:

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

To nie jest piękne, ale wydaje się działać. Zobaczmy, czy ktokolwiek może zrobić lepiej

Odpowiedz

1

Rozwiązanie satur9nine, aby umieścić renderowane drzewo UI gdzieś za nieprzejrzystym pierwszym planem, wydaje się być jedynym obsługiwanym rozwiązaniem. Możesz również bawić się nieprzezroczystością elementu nadrzędnego, aby uniknąć pojawienia się go. Inną opcją jest renderowanie go za pomocą Direct2D lub użycie czegoś takiego jak metody WinRTXamlToolkit.Composition.Render() z WinRT XAML Toolkit.

1

WinRTXamlToolkit.Composition namespace ma to rozszerzenie, które działa. Po prostu wywołaj tę metodę:

await WriteableBitmapRenderExtensions.RenderToPngStream(element); 
Powiązane problemy