[英]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.