4

我在 WindowStyle=None 和 ResizeMode=NoResize 的 WPF-windows 上苦苦挣扎。在窗口内容上使用 DropShadow 效果有什么好的选择吗?我在 Shell 集成库中尝试过 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>
4

3 回答 3

2

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

    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>

于 2018-03-11T20:28:19.073 回答
0

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

于 2011-05-26T09:14:04.443 回答
0
<Window 
    .........
    .........
    .........
    Title="Welcome" Loaded="Window_Loaded" Height="400" Width="400" ResizeMode="NoResize" AllowsTransparency="True" WindowStyle="None" ShowInTaskbar="False" WindowStartupLocation="CenterScreen" Background="Transparent" BorderThickness="0">
<Border Margin="10" CornerRadius="100"
        BorderBrush="Black"
        BorderThickness="1"
        CornerRadius="10">
    <Border.Effect>
        <DropShadowEffect />
    </Border.Effect>

    <Grid> 
     ...
     ...//main design inside windows
     ...
    </Grid>
</Border>
于 2019-10-11T04:57:07.617 回答