wpf: пользовательское окно с тенью - PullRequest
4 голосов
/ 22 августа 2010

Я работаю над приложением c # wpf с пользовательским окном (allowtransparency = true, resize = none, style window = none).

Теперь я хотел бы добавить тень, похожую на программное обеспечение Zune PC. Я прочитал об этом, и включенный эффект дропшоу не охватывает все углы моего окна, и, как говорят, снижает производительность.

Я хочу реализовать это следующим образом: я добавляю поле в сетку макета, которое программно удаляю при максимизации приложения.

Каков наилучший способ добавить тень, которая может быть применена к сетке, которая не снижает производительность и отбрасывает тень во всех направлениях?

Ответы [ 4 ]

10 голосов
/ 13 ноября 2013

Я попробовал опубликованные здесь решения, но ни одно из них не приблизило меня к желаемому конечному результату (см. Скриншот ниже).Поэтому я попробовал несколько разных вещей и выкладываю здесь свое решение, на случай, если кто-то будет заинтересован в достижении чего-то подобного.Кстати: если вы могли бы улучшить мое решение, пожалуйста, дайте мне знать, потому что я считаю его немного избыточным в данный момент.

Window with blue drop shadow effect

Хорошо, теперь для кода, который управляет этим эффектом:

<Window ...
    WindowStyle="None" AllowsTransparency="True" Background="Transparent"
    ...>

    <Border>
        <Border.Effect>
            // opacity does not need to be specified but it looks cooler when you do
            <DropShadowEffect BlurRadius="20" ShadowDepth="0" Opacity="0.8" 
                Color="Blue" />
        </Border.Effect>

        // make sure the value for Grid Margin is the same as DropShadowEffect 
        // BlurRadius
        <Grid Background="White" Margin="20">

            // I tried setting borderthickness and borderbrush to the previous 
            // <Border> element but instead of the border being shown right after  
            // the grid and before the drop shadow, it would show after the drop 
            // shadow making the overall effect very ugly
            <Border BorderThickness="1" BorderBrush="Black">
                // now you can specify whatever you want to display in the window
                <Grid>
                    ....
                </Grid>
            </Border>
        </Grid>
</Window>
4 голосов
/ 22 августа 2010

Направление -75, ShadowDepth of 2 и BlurRadius из 27 помогли мне.

Лучший способ - использовать смесь для этого.

НТН

4 голосов
/ 22 августа 2010

DropShadowEffect не "убивает производительность" ... он отображается с использованием аппаратного ускорения, и рендеринг тени на окне не имеет большого значения для современных графических процессоров Вы, вероятно, путаете с DropShadowBitmapEffect, который представлен программным обеспечением. В любом случае, все BitmapEffects устарели в 3.5 SP1 и вообще не работают в 4.0, теперь можно использовать только Effects

2 голосов
/ 24 марта 2012

Исходя из кода принцев, я хотел вставить конечный продукт.

<Window x:Class="RDNScoreboard.Views.InitialWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="InitialWindow" Height="300" Width="300"
    WindowStyle="None"  
AllowsTransparency="True" Background="Transparent"
   BorderThickness="3"  >
<Border>
    <Border.Effect>
        <DropShadowEffect BlurRadius="27" Color="Black" Opacity="0.8" ShadowDepth="2" Direction="-75" />
    </Border.Effect>
    <Grid Background="White"  >
    </Grid>
</Border>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...