Видимо, всплывающие окна в настоящее время не поддерживают тени, см. Ссылку .
Тем не менее, я нашел обходной путь, который работает довольно хорошо, IMO. По сути, идея состоит в том, чтобы поместить Canvas в другой прозрачный Canvas и просто применить тень к вложенному Canvas. Просто. Вот пример:
<Grid>
<TextBox x:Name="MyTxtBx" Width="50"
Height="20" Text="Hello"/>
<Popup IsOpen="True" Width="200" Height="100"
PlacementTarget="{Binding ElementName=MyTxtBx}"
AllowsTransparency="True" >
<Canvas Background="Transparent">
<Canvas Background="Green" Width="150" Height="50">
<Canvas.BitmapEffect>
<DropShadowBitmapEffect Softness=".5"
ShadowDepth="5"
Color="Black"/>
</Canvas.BitmapEffect>
<Label Content="THIS IS A POPUP TEST"/>
</Canvas>
</Canvas>
</Popup>
</Grid>
Следует отметить, что вложенный холст должен быть меньше, чем размер его контейнера. Также необходимо установить AllowsTransparency.