Расти круг по центру экрана

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

Пока что при запуске анимации я могу увеличить круг от высоты до ширины от 0 до 500. Окно, в котором оно удерживается, установлено прозрачным и SizeToContent ="WidthAndHeight". Это хорошо, потому что содержащее окно обнимает круг, но при этом круг больше не растет от центра экрана, он начинается от центра и растет вправо и вниз.

Как я могу увеличить круг от центра, имея SizeToContent="WidthAndHeight"?

Вот мой код до сих пор:

XAML

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" 
        WindowStyle="None" 
        AllowsTransparency="True" 
        Background="Transparent"  
        WindowStartupLocation="CenterScreen"
        SizeToContent="WidthAndHeight">

    <Window.Resources>
        <Storyboard x:Key="EllipseExpand">
            <DoubleAnimation From="0" To="500" Duration="0:0:5"
                             Storyboard.TargetName="MyCircle"
                             Storyboard.TargetProperty="Width"/>
            <DoubleAnimation From="0" To="500" Duration="0:0:5"
                             Storyboard.TargetName="MyCircle"
                             Storyboard.TargetProperty="Height"/>
        </Storyboard>
    </Window.Resources>

    <Ellipse Name="MyCircle" Fill="Red" Height="0" Width="0"/>

</Window>

Код позади

Imports System.Windows.Media.Animation

Class MainWindow
    Public Sub WindowLoaded() Handles Me.Loaded
        Dim ellipseExpand As Storyboard = FindResource("EllipseExpand")

        ellipseExpand.Begin()
    End Sub
End Class

1 ответ

Решение

Я вместо этого использовал обходной путь:

Я разместил эллипс в большом прозрачном окне, чтобы он мог выглядеть так, как если бы он рос из центра экрана. Однако, если вы перетаскиваете эллипс к верхней части экрана, он отталкивается вниз (потому что операционная система Windows всегда пытается поместить верхнюю часть невидимого окна на экран, а не обрезать его).

Чтобы преодолеть эту проблему, я использовал этот поток: Как мне переместить окно wpf в отрицательное верхнее значение?

Другие вопросы по тегам