Вы можете использовать Grid
, так как он складывает элементы.Если вы поместите элемент сначала, он будет визуально сложен ниже второго, только если они находятся в той же строке или столбце.В примере ниже RedGrid визуально ниже WhiteGrid .Таким образом, вы не можете визуально увидеть это.Но когда вы используете RenderTargetBitmap для RedGrid , он вернет прямоугольник красного цвета в виде изображения
<Grid >
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid x:Name="RedGrid" Background="Red" Height="100" Width="100"></Grid>
<Grid x:Name="WhiteGrid" Background="White" Height="100" Width="100"></Grid>
<Button Grid.Row="1" Content="Render" Click="Button_Click"></Button>
</Grid>
// C # code
private async void Button_Click(object sender, RoutedEventArgs e)
{
RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(GridToBeRendered);
var pixelBuffer = await rtb.GetPixelsAsync();
var pixels = pixelBuffer.ToArray();
var displayInformation = DisplayInformation.GetForCurrentView();
StorageFolder myfolder = ApplicationData.Current.LocalFolder;
StorageFile file;
file = await myfolder.CreateFileAsync("Render" + ".png", CreationCollisionOption.GenerateUniqueName);
if (file != null)
{
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Premultiplied,
(uint)rtb.PixelWidth,
(uint)rtb.PixelHeight,
displayInformation.RawDpiX,
displayInformation.RawDpiY,
pixels);
await encoder.FlushAsync();
}
}
await Launcher.LaunchFileAsync(file);
}