注意DropShadowPanel
可以掩盖Rectangle
,这样你就可以创建一个填充更少Rectangle
并将其放置一个DropShadowPanel
里面创建只有Rectangle
的边界扩展阴影。然后,您只需将它放在Grid
中,然后剪下Grid
以切断外部阴影。如果您想要背景颜色,只需将另一个Rectangle
添加到Grid
并将其放置在DropShadowPanel
之后。
示例代码
<Grid Width="400"
Height="200"
Margin="24">
<Grid.Clip>
<RectangleGeometry Rect="0,0,400,200" />
</Grid.Clip>
<Rectangle x:Name="BackgroundColor"
Fill="LightSteelBlue" />
<controls:DropShadowPanel x:Name="InnerShadow"
HorizontalContentAlignment="Stretch"
BlurRadius="15"
ShadowOpacity="0.5"
Color="Black">
<Rectangle x:Name="BorderColor"
Stroke="LightGray"
StrokeThickness="10" />
</controls:DropShadowPanel>
</Grid>
结果 
关于裁剪
有一点要注意的是,你将需要手册册y每当Grid
的大小发生变化时,更新Rect
的大小。或者,您可以使用新的合成API来剪辑 -
var visual = ElementCompositionPreview.GetElementVisual(RootGrid);
var compositor = visual.Compositor;
visual.Clip = compositor.CreateInsetClip();
Thanx,这很好。 – user3239349