CanResize окно с тенью

400
05 июня 2017, 21:36

Нужен стиль для окна имеющего тень в 4 направлениях (left, top, right, bottom), размер которого можно было бы менять мышью.

Набросок стиля:

<Style TargetType="{x:Type Window}">
        <Setter Property="SnapsToDevicePixels" Value="True"/>
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="AllowsTransparency" Value="True"/>
        <Setter Property="WindowStyle" Value="None"/>
        <Setter Property="ResizeMode" Value="CanResizeWithGrip"/>
        <Setter Property="WindowChrome.WindowChrome">
            <Setter.Value>
                <WindowChrome NonClientFrameEdges="None" GlassFrameThickness="-1" CornerRadius="0" ResizeBorderThickness="5" CaptionHeight="30"/>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Window}">
                    <Grid>
                        <Border Margin="20" BorderThickness="1" BorderBrush="Black">
                            <Border.Effect>
                                <DropShadowEffect Direction="-90" BlurRadius="20" ShadowDepth="0" Color="Black"/>
                            </Border.Effect>
                            <Grid Background="White">
                                <AdornerDecorator>
                                    <ContentPresenter/>
                                </AdornerDecorator>
                            </Grid>
                        </Border>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Проблема стиля:

  1. ResizeBorderThickness определяет Thickness для бордера, которого в принципе нет - он описывается чисто логически и является просто видимым (не Transporent) краем окна указанной ширины.
  2. Для хрома окна нет такого понятия как отступ. Он всегда сверху. Даже если там верхняя тень...

Единственное решение которое я вижу - нарисовать тень на более низком уровне. Как?

Да и поясните же за что отвечает WindowChrome.GlassFrameThickness? Что будет если ему отрицательное значение присвоить?

READ ALSO
Алгоритм в C# для логической игры

Алгоритм в C# для логической игры

Подскажите пожалуйста алгоритм для подсчёта рекорда в C# для логической игрыУ меня есть игра, в которой нужно складывать картинку на время

485
Как вынести счётчик файлов в отдельный метод

Как вынести счётчик файлов в отдельный метод

Для начало прохожусь циклом по папкам и собираю файлы в FilesF = new List<string>()

314
Сериализация делегата в UWP с помощью Newtonsoft Json

Сериализация делегата в UWP с помощью Newtonsoft Json

Добрый деньПытаюсь сериализовать делегат с помощью json:

483
Отловить нажатие левой кнопки мыши

Отловить нажатие левой кнопки мыши

Добрый всем день! Пытаюсь отловить нажатие левой кнопки мыши, но ничего не происходит!

296