【发布时间】:2018-02-03 13:07:42
【问题描述】:
在构图中使用投影时,我得到了不良效果。要复制此问题,请执行以下步骤:
第 1 步:创建一个新的 UWP 项目并定位到 Windows 10 Fall Creators Update (10.0; Build 16299)
第二步:将以下内容复制到MainPage.xaml
<Page x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid>
<Canvas x:Name="_shadow" Width="500" Height="500" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<Canvas x:Name="_shadowSource" Width="500" Height="500" VerticalAlignment="Top" HorizontalAlignment="Left">
<Ellipse Width="50" Height="50" Fill="DarkOrange" Canvas.Top="50" Canvas.Left="50"/>
<Ellipse Width="50" Height="50" Fill="Aquamarine" Canvas.Top="100" Canvas.Left="100"/>
<Ellipse Width="50" Height="50" Fill="Crimson" Canvas.Top="150" Canvas.Left="150"/>
<Ellipse Width="50" Height="50" Fill="BlueViolet" Canvas.Top="200" Canvas.Left="200"/>
<Ellipse Width="50" Height="50" Fill="DarkGreen" Canvas.Top="250" Canvas.Left="250"/>
<Ellipse Width="50" Height="50" Fill="Gold" Canvas.Top="300" Canvas.Left="300"/>
<Ellipse Width="50" Height="50" Fill="MediumAquamarine" Canvas.Top="350" Canvas.Left="350"/>
<Ellipse Width="50" Height="50" Fill="Violet" Canvas.Top="400" Canvas.Left="400"/>
<Ellipse Width="50" Height="50" Fill="LightSeaGreen" Canvas.Top="450" Canvas.Left="450"/>
</Canvas>
</Grid>
</Page>
第三步:将以下内容复制到MainPage.xaml.cs
using System.Numerics;
using Windows.UI.Composition;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Hosting;
namespace App1
{
public sealed partial class MainPage
{
public MainPage()
{
InitializeComponent();
var compositor = Window.Current.Compositor;
var shadow = compositor.CreateDropShadow();
var layer = compositor.CreateLayerVisual();
shadow.SourcePolicy = CompositionDropShadowSourcePolicy.InheritFromVisualContent;
layer.Shadow = shadow;
layer.Size = new Vector2(500, 500);
var visual = ElementCompositionPreview.GetElementVisual(_shadowSource);
layer.Children.InsertAtBottom(visual);
ElementCompositionPreview.SetElementChildVisual(_shadow, layer);
}
}
}
_shadowSource 的内容被移动到新图层,阴影设置为InheritFromVisualContent。应用加载时,您会看到阴影渲染良好,但调整应用大小会产生视觉故障。
当您注释掉 //layer.Shadow = shadow; 行时会发生以下情况
这里发生了什么?为什么阴影会导致这种情况?
【问题讨论】:
-
FWIW,我有同样的问题(对我来说闻起来像一个错误),发布在 github 上 github.com/microsoft/Windows.UI.Composition-Win32-Samples/…