WPF: тень на окне без рамки без специального хрома - PullRequest
3 голосов
/ 11 мая 2011

Я борюсь с тенью на окнах WPF с WindowStyle = None и ResizeMode = NoResize.Есть ли хорошая альтернатива использованию эффекта DropShadow для содержимого окна?Я пробовал WindowChrome в библиотеке интеграции с оболочкой, но он не показывает никакого «Chrome», когда ResizeMode = NoResize.

Если можно было как-то нарисовать тень wpf-drop за пределами границ моего окна, это могло бы стать решением.Если я рисую тень внутри окна, я получаю другое поведение, отличное от стандартного, например, при наведении курсора мыши на тень.При этом в моем окне не должно быть проверки попадания, и нажатие на эту область должно активировать окно позади и т. Д.

Кажется, что 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>

Ответы [ 2 ]

1 голос
/ 11 марта 2018

Этот код будет работать с окном без границ, чтобы показать тень, если окно не изменяет размер и его стиль не равен.

    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>

0 голосов
/ 26 мая 2011

Если вы измените ResizeMode на CanResize и установите для ResizeBorderThickness значение 0, вы получите окно без полей, которое не может быть изменено, а тень можно щелкнуть, чтобы активировать окно за ним.

...