标签:rect 告诉 dir 原因 使用 defaults use one ntp
在以前项目中,需要给用户一定提示。设计师建议在鼠标进入时显示窗口阴影,离开时取消窗口阴影。
很自然,都会想到直接在窗口的内容或者自定义窗口的最外层元素上加效果。示例如下:
<Grid> <Grid.Effect> <DropShadowEffect x:Name="ShadowEffect" BlurRadius="15" Direction="270" Opacity="0" ShadowDepth="15" Color="Yellow" /> </Grid.Effect> </Grid>
很不幸,上述方法不会生效。原因何在?窗口的非工作区(也就是Grid的四周)的渲染是由系统控制。虽然不清楚是绘出来了被遮住了还是根本没绘出来,但是告诉了我们此路不通。
还好我们用的是WPF,可以自己定义模板和样式。于是简单测试了一下就发现了方案。下面就是我使用的样式一个示例(省略了模拟的控制按钮和其他的一些功能)
<Style x:Key="ShadowWindow" TargetType="Window"> <Setter Property="OverridesDefaultStyle" Value="True" /> <Setter Property="AllowsTransparency" Value="True" /> <Setter Property="WindowStyle" Value="None" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Window"> <Border Padding="15"> <Border Name="BdrShadow"> <ContentPresenter ContentSource="Content" /> <Border.Effect> <DropShadowEffect x:Name="ShadowEffect" BlurRadius="15" Direction="270" Opacity="0" ShadowDepth="15" Color="Yellow" /> </Border.Effect> </Border> </Border> <ControlTemplate.Triggers> <EventTrigger RoutedEvent="MouseEnter"> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:1" Storyboard.TargetName="ShadowEffect" Storyboard.TargetProperty="Opacity" To="0.5" /> </Storyboard> </BeginStoryboard> </EventTrigger> <EventTrigger RoutedEvent="MouseLeave"> <BeginStoryboard> <Storyboard> <DoubleAnimation Duration="0:0:1" Storyboard.TargetName="ShadowEffect" Storyboard.TargetProperty="Opacity" /> </Storyboard> </BeginStoryboard> </EventTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>
标签:rect 告诉 dir 原因 使用 defaults use one ntp
原文地址:http://www.cnblogs.com/yiyan127/p/WPF-WindowShadow.html