在wpf中最大化窗口时删除阴影效果

时间:2012-12-28 07:29:37

标签: wpf wpf-controls

我有一个带风格的窗口

Background="Transparent", AllowsTransparency="True", WindowStyle="None",  ResizeMode="NoResize".

我已经放置了自定义最小,最大,关闭按钮和实现的功能。因为我希望窗口在所有方面调整窗口大小。我用HwndSource实现了它,效果很好。现在我担心的是我想要窗口的阴影效果。所以我将阴影效果放在边框上。

<Border CornerRadius="5" Margin="10">

    <Border.BitmapEffect>
        <DropShadowBitmapEffect ShadowDepth="10" Opacity=".5" Softness="9" />
    </Border.BitmapEffect>

    <Grid> **Content over here**</Grid>
</Border>

窗口获取阴影效果。但当我最大化窗口。因为我添加了边框,所以它不适合屏幕。我需要在窗口最大化时删除阴影效果,使其适合屏幕。当窗口未处于最大化状态时,应出现阴影效果。如何获得这个或有没有其他方法来获得这个...请帮我找到解决方案。

2 个答案:

答案 0 :(得分:0)

我认为通过为Border创建样式,可以在代码中动态添加/删除阴影效果。您可以为边框创建这样的样式:

<Style x:Key="borderstyle" TargetType="Border">
                <Setter Property="BitmapEffect">
                    <Setter.Value>
                        <DropShadowBitmapEffect ShadowDepth="10">   </DropShadowBitmapEffect>
                    </Setter.Value>
                </Setter>
            </Style>

然后在代码

中动态设置它

borderelement.Style =(Style)Application.Current.MainWindow.Resources [“borderstyle”];

并使用以下代码将其删除

borderelement.Style = null

答案 1 :(得分:0)

您可以使用触发器来确定Window是否已最大化,然后在触发器设置器中删除效果。只需重载Window的模板,并在ControlTemplate触发器内添加一个触发器

 <Window.Template>
    <ControlTemplate TargetType="Window">
        <Border x:Name="brd">
            <Border.Effect>
                <DropShadowEffect BlurRadius="20" Color="Black"/>
            </Border.Effect>
            <Grid Width="200" Height="200" MouseDown="Grid_MouseDown_1" Background="Red"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="WindowState" Value="Maximized">
                <Setter Property="Effect" TargetName="brd" Value="{x:Null}"></Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

</Window.Template>