在弹出窗口上设置 HasDropShadow 属性

Setting the HasDropShadow property on a Popup

我在自定义 StyleControlTemplate 中有一个 Popup 控件。对于此控件,我想根据声明的 xaml 文件顶部的变量设置 HasDropShadow,如下所示:

<sys:Boolean x:Key="IsDropShadowEnabled">true</sys:Boolean>

所以我尝试像这样声明 Popup(只显示相关部分):

<Popup AllowsTransparency=true HasDropShadow="{StaticResource IsDropShadowEnabled}"/>

但这给了我以下错误。

The property "HasDropShadow" does not have an accessible setter.

'HasDropShadow' property is read-only and cannot be set from markup.

所以我检查了 MSDN 果然:

A drop shadow effect displays when the SystemParameters.DropShadow property and the Popup.AllowsTransparency property are set to true.

所以我想我可以绕过这个并根据我的变量在弹出窗口上设置自定义投影所以我尝试了以下触发器:

<Trigger Property="{StaticResource IsDropShadowEnabled}" Value="true">

但是当然这对以下错误消息不起作用:

An object of the type "System.Boolean" cannot be applied to a property that expects the type "System.Windows.DependencyProperty".

有没有办法根据静态变量设置阴影?

我通过使用 DataTrigger 并将其绑定到 StaticResource 来实现它,如下所示:

<DataTrigger Binding="{Binding Source={StaticResource IsDropShadowEnabled}}" Value="true">

然后使用 DropShadowEffect class.

提供我自己的阴影