我不是使用Windows合成API的专家。如何在UWP中的控件或布局或任何可视控件上实现DropShadow,而无需出于某些目的使用DropShadowPanel
。附带的示例将很棒。另外,请确保阴影效果在控件的后面并且没有覆盖
答案 0 :(得分:1)
在您的代码中,您已经从控件的 Compositor 中创建了一个SpriteVisual
,并配置了SpriteVisual
的阴影,但是您没有设置此{{1} }命名为SpriteVisual
作为Visual树的子级,这样您就看不到要应用的阴影。您只需将以下代码放在代码块的末尾即可。
shadowVisual
您的代码将如下所示:
...
ElementCompositionPreview.SetElementChildVisual(Control, shadowVisual);
注意:我将//Control is the control the shadow is applied to. e.g. Button, TextBlock etc.
Compositor compositor = ElementCompositionPreview.GetElementVisual(Control).Compositor;
var shadowVisual = compositor.CreateSpriteVisual();
var dropShadow = compositor.CreateDropShadow();
shadowVisual.Shadow = dropShadow;
//UpdateShadowSize
Vector2 newSize = new Vector2(0, 0);
if (Control is FrameworkElement contentFE)
{
newSize = new Vector2((float)contentFE.ActualWidth, (float)contentFE.ActualHeight);
//newSize = new Vector2(200, 60);
}
shadowVisual.Size = newSize;
//Some hardcoded values for now
dropShadow.BlurRadius = 8;
dropShadow.Opacity = 0.3f;
dropShadow.Offset = new Vector3(new Vector2(2, 2), 0);
dropShadow.Color = Windows.UI.Colors.Black;
// Sets a Visual as child of the Control’s visual tree.
ElementCompositionPreview.SetElementChildVisual(Control, shadowVisual);
更改为dropShadow.Opacity
,以使阴影更清晰。
---更新---
是的,您可以在MainContent后面放置一个特殊元素,然后从该元素创建阴影以在Main内容后面创建阴影。 0.3f
方法应该可以使用,下面是一个示例,您可以尝试一下。
xaml:
GetAlphaMask
后面的代码:
<Grid Loaded="Grid_Loaded">
<!-- Canvas to create shadow-->
<Canvas Name="canvas"/>
<TextBlock x:Name="textBlcok" Text="this is text blcok for test shadow"/>
</Grid>
答案 1 :(得分:0)
https://www.microsoft.com/en-us/p/windows-community-toolkit-sample-app/9nblggh4tlcq
此应用程序包含许多控件,可用来构建漂亮的uwp应用程序,它具有一个影子库,您可以查看如何在项目中实现它,并为任何控件提供一个影子