簡體   English   中英

隱藏xaml元素,但也可以使用UWP中的RenderTargetBitmap進行渲染

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM