1

我有一个带有样式的窗口

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>

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

4

2 回答 2

0

您可以使用触发器来确定窗口是否最大化,然后在触发器设置器中删除效果。只需为 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>
于 2012-12-28T11:20:03.987 回答
0

我认为可以通过为边框创建样式来在代码中动态添加/删除阴影效果。您可以为边框创建一个样式,如下所示:

<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"];

并使用以下代码将其删除

边框元素样式 = null

于 2012-12-28T10:05:08.043 回答