Изменение видимости окна WPF Animate - PullRequest
4 голосов
/ 21 декабря 2010

Я пытаюсь выяснить, как анимировать переход с Visibile на Hidden для окна WPF.То, как у меня сейчас работает приложение, заключается в том, что окно обычно скрыто, и когда я перемещаю мышь в сторону экрана, оно выскакивает, я использую для этого конвертер типа «булево» в видимость, но то, что я хотел бы сделатьчтобы приложение более плавно выдвигалось при наведении мыши, а затем снова вставлялось.

У меня нет ничего с анимацией, поэтому я не уверен, как это сделать.Во-первых, я не совсем уверен, какую анимацию я должен использовать, чтобы сделать это, во-вторых, я не совсем уверен, должен ли я вызывать это для свойства «IsWindowVisibile» в viewmodel или мне следует привязать его к событию VisibilityChanged, и в-третьихЯ не уверен, возможно ли это, когда размер окна является переменным.

[Редактировать]

При необходимости я «приму» решение по непрозрачности, но это не совсем«скользящий» эффект, который я пытаюсь получить.

Ответы [ 2 ]

12 голосов
/ 21 декабря 2010

Я сделал что-то подобное (непрозрачность достигает 0 в течение 2 секунд и окно скрывается): просто посмотрите на код, он прост.cs

    public void ShowMe() {
        (FindResource("showMe") as Storyboard).Begin(this);
    }
    public void HideMe() {
        (FindResource("hideMe") as Storyboard).Begin(this);
    }

Просто позвоните HideMe() или ShowMe() вместо установки Visibility = Visibility.Hidden в коде

Редактировать

WPF работает медленнопри перемещении окон, если вам нужна анимация скольжения:

  1. Создайте прозрачное окно (AllowsTransparency="True" Background="Transparent" WindowStyle="None")

  2. Поместите все элементы управления на непрозрачныепанель (Background="{StaticResource {x:Static SystemColors.ControlBrushKey}}")

  3. Анимация Margin.Left этой панели из 0 в ActualWidth окна, затем скрытие окна - это устранит проблему сохранения размера окна

2 голосов
/ 21 декабря 2010

Игра с окном Opacity / Visibility требует простого DoubleAnimation.

Пример:

IsVisibleChanged += new DependencyPropertyChangedEventHandler(MainWindow_IsVisibleChanged);

void MainWindow_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    DoubleAnimation da = new DoubleAnimation()
    {
        From = (IsVisible) ? 0 : 1,
        To = (IsVisible) ? 1 : 0,
        Duration = TimeSpan.FromSeconds(1)
    };

    BeginAnimation(Window.OpacityProperty, da);
}

Проблема:

Чтобы это работало должным образом, вам нужно установить AllowsTransparency на True в вашем окне. Если вы не установите это, ваше окно с Opacity, установленным на 0, будет Black.

Проблема в том, что это свойство равно True, необходимо указать WindowStyle как None. Что означает отсутствие рамки вокруг вашего окна. Это означает, что не нужно закрывать, свернуть, развернуть, восстановить строку заголовка.

Вы должны предоставить пользовательский шаблон (вероятно, наследующий Window класс), чтобы поместить эти кнопки там.

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