首页 文章

WPF:在没有自定义镶边的无边框窗口上投影

提问于
浏览
2

我正在使用WindowStyle = None和ResizeMode = NoResize在WPF窗口上使用投影 . 在窗口内容上使用DropShadow效果有什么好的选择吗?我在Shell Integration Library中尝试过WindowChrome,但是当ResizeMode = NoResize时它没有显示任何“Chrome” .

如果有可能以某种方式在我的窗口边界之外绘制一个wpf-drop-shadow,那么它可能是一个解决方案 . 如果我在窗口内绘制阴影,我会得到一个不同的行为,然后标准,例如将鼠标光标移动到阴影上 . 在执行此操作时,我的窗口中应该没有命中测试,单击此区域应激活后面的窗口等 .

Zune似乎正在绘制自己的阴影,因为它看起来不像标准的Chrome阴影 . 但它的表现就像一个正常的投影,就像它不捕获鼠标事件一样 . 我不知道他们是怎么做到的 .

Spotify还有另一种阴影,也没有捕获鼠标事件 .

我想这些应用程序完全可以绘制自己的WindowChrome,但是如何? WPF是否支持这种方式?

<Window x:Class="ShellIntegrationTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
        Title="MainWindow" Height="512" Width="384" WindowStyle="None" ResizeMode="NoResize">
  <shell:WindowChrome.WindowChrome>
    <shell:WindowChrome ResizeBorderThickness="5" GlassFrameThickness="-1" CornerRadius="0" CaptionHeight="25" />
  </shell:WindowChrome.WindowChrome>
</Window>

3 回答

  • 2

    我看到了这一点,因为我试图完成同样的事情 . 看看我提出的解决方案

    Maximum custom window loses drop shadow effect

    使用我的解决方案,您仍然可以调整表单大小

  • 1

    如果窗口设置为不调整大小并且样式为none,则此代码将在无边框窗口上工作以显示阴影 .

    xmlns:local="clr-namespace:BorderTest" 
        mc:Ignorable="d" WindowStyle="None" ResizeMode="NoResize"
       Title="MainWindow" Height="350" Width="525" AllowsTransparency="True" Background="Transparent">
    <Border Margin="10" BorderThickness="1" BorderBrush="Blue">
        <Border.Effect>
            <DropShadowEffect Color="Black"
                              Direction="270"
                              BlurRadius="10"
                              ShadowDepth="3" />
        </Border.Effect>
        <Grid Background="White">
    
        </Grid>
    </Border>
    
  • -2

    如果将ResizeMode更改为CanResize并将ResizeBorderThickness设置为0,您将获得一个无边框窗口,无法调整大小并且可以单击投影,以便激活它后面的窗口 .

相关问题