[英]Hiding a xaml element but also be able to render using RenderTargetBitmap in UWP
我正在使用RenderTargetBitmap
捕获XAML中控件的内容。 我知道使用Visibility =“ Collapse”可以隐藏控件,但是当控件折叠时, RenderTargetBitmap
会呈现空白图像,因为根据文档
树中但将“可见性”设置为“已折叠”的内容将不会被捕获。
和
无法捕获的内容将在捕获的图像中显示为空白,但是同一视觉树中的其他内容仍可以捕获并进行渲染(存在无法捕获的内容不会使对的全部捕获无效XAML组成)。
但是,我不想在屏幕上显示它。
我正在寻找z-index或图层之类的东西,因此我不显示它,但仍然能够捕获该元素。
或者,即使visibility
设置为collapse
,也可以使用一些不使用RenderTargetBitmap
来渲染元素的其他方式
您可以在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#代码
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.