Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
1

WPF(XAML) анимация сокрытие окна

09.12.2016, 15:29. Просмотров 875. Ответов 4
Метки wpf, xaml (Все метки)

Доброго дня.

Рисую окно, по нажатию на кнопку часть окна должна скрываться, оставляя нажатую кнопку на месте, а при повторном нажатии что бы всё возвращалось на круги своя. Но происходит так, что поле кнопки расползается на всё окно, а при повторном нажатии кнопка окно не возвращается к исходному варианту. Как какое избежать пофиксить?

Вот мой код сокрытия окна:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
if (window.flagHide)
            {
                this.Visibility = System.Windows.Visibility.Hidden;
 
                window.flagHide = false;
 
                DoubleAnimation doubleAnimation = new DoubleAnimation();
                doubleAnimation.From = toolsDockPanelDefaultHeight;
                doubleAnimation.To = 0;
                doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200));
                ExponentialEase expoEase = new ExponentialEase();
                expoEase.Exponent = 7;
                doubleAnimation.EasingFunction = expoEase;
 
                Storyboard.SetTarget(doubleAnimation, window.toolsDockPanel);
 
                System.Windows.Shapes.Rectangle rect = new System.Windows.Shapes.Rectangle();
 
                Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(DockPanel.HeightProperty));
                Storyboard storyboard = new Storyboard();
                storyboard.Children.Add(doubleAnimation);
                storyboard.Begin();
            }
            else
            {
                this.Visibility = System.Windows.Visibility.Visible;
 
                window.flagHide = true;
 
                DoubleAnimation doubleAnimation = new DoubleAnimation();
                doubleAnimation.From = 0;
                doubleAnimation.To = toolsDockPanelDefaultHeight;
                doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200));
                ExponentialEase expoEase = new ExponentialEase();
                expoEase.Exponent = 7;
                doubleAnimation.EasingFunction = expoEase;
 
                Storyboard.SetTarget(doubleAnimation, toolsWindowL.toolsDockPanel);
 
                System.Windows.Shapes.Rectangle rect = new System.Windows.Shapes.Rectangle();
                Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(DockPanel.HeightProperty));
                Storyboard storyboard = new Storyboard();
                storyboard.Children.Add(doubleAnimation);
                storyboard.Begin();
            }
Моё окно состоит примерно из следующих блоков:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <Grid x:Name="LayoutRoot" Background="Gray" ShowGridLines="True">
 
        <DockPanel>
            <DockPanel Name="toolsDockPanel" DockPanel.Dock="Top" >
                  //контент
            </DockPanel>
 
            <DockPanel Name="Hide" DockPanel.Dock="Bottom" Width="70" Height="40">
                <Button DockPanel.Dock="Bottom" Cursor="Hand" Name="hideButton" HorizontalAlignment="Center" VerticalAlignment="Center" 
                    ToolTip="Hide" Click="hideButton_Click" 
                    Grid.Row="4" IsTabStop="False" 
                    Margin="0,0,0,0"
                    Width="70" Height="40"
                    Content="Hide now!">
                </Button>
            </DockPanel>
        </DockPanel>
    </Grid>
Пытаюсь скрыть DockPanel с "контентом" внутри. Может мне стоит использовать какой другой контейнер или атрибуты какие нужны?

За ранее спасибо.

Добавлено через 3 часа 8 минут
Удалось кое-что поправить. Добавил SizeToContent="WidthAndHeight" в параметры окна и получилось свернуть всё окно до размеров кнопки. Но остался другой баг, когда окно сворачивается до размеров кнопки, то то оно позиционируется на экране по верхнему краю, то есть кнопка перемещается наверх, а мне нужно, что бы кнопка осталась, там где была. Как это можно исправить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2016, 15:29
Ответы с готовыми решениями:

DataContent на XAML (Wpf)
Не знаю возможно ли такое. Если да - подскажите как. Примеры упрощённые для обучения. Есть...

Сокрытие части окна при первом вызове
Доброго дня. Рисую интерфейс и сей час возник вопрос по данной теме. У меня есть одно окно, оно...

Анимация в XAML Windows store (pc)
Нужен пример анимации: при нажатии на кнопку клавиатуры, любой элемент(к примеру Image) двигается,...

Сериализация xaml wpf пример
Подскажите пожалуйста как сохранить ListBox который создан в XAML а потом из него запустить...

WPF TabControl через XAML
Доброго всем времени суток. Люди, подскажите, желательно, как через XAML в WPF сделать вкладки у...

4
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
13.12.2016, 17:14  [ТС] 2
Цитата Сообщение от Naomis Посмотреть сообщение
когда окно сворачивается до размеров кнопки, то то оно позиционируется на экране по верхнему краю, то есть кнопка перемещается наверх, а мне нужно, что бы кнопка осталась, там где была. Как это можно исправить?
Нет никаких идей? Как это можно поправить?

Добавлено через 55 минут
попробовал сделать без анимации следующим образом
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        void HideTools(ToolsWindow window)
        {
            if (window.flagHide)
            {
                this.Visibility = System.Windows.Visibility.Hidden;
                window.flagHide = false;
 
                window.Visibility = Visibility.Hidden;
                window.toolsDockPanel.Height = 0;
                window.Top = screenHeight - window.Hide.Height;
                window.Visibility = Visibility.Visible;
            }
            else
            {
                this.Visibility = System.Windows.Visibility.Visible;
                window.flagHide = true;
 
                window.Visibility = Visibility.Hidden;
                window.toolsDockPanel.Height = window.toolsDockPanelDefaultHeight;
                window.Top = screenHeight - (window.Height + window.toolsDockPanelDefaultHeight);
                window.Visibility = Visibility.Visible;
            }
        }
Но при таком методе появляется дурацкое "мигание" окна(когда части сворачиваются и разворачиваются). Можно ли как-то "застопить" объектыб а потом отрисовать за раз?

Добавлено через 1 час 8 минут
Добился, что бы не было дурацкого мигания. В свойства окна пишется следующее AllowsTransparency="True" Background="Transparent", а что бы что-либо скрыть используется свойство окна Visibility. Всё.

Но это без анимации, как сделать так же культурно, но с анимацией? Вопрос по прежнему открыт.
0
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
31.01.2018, 11:26  [ТС] 3
Давным давно сделал просто без анимации. А если всё же с ней? Следует ли мне использовать многопоточность?
0
SatanaXIII
Почетный модератор
Эксперт С++
5800 / 2794 / 386
Регистрация: 01.11.2011
Сообщений: 6,803
Завершенные тесты: 1
01.02.2018, 11:45 4
Naomis, я где-то прям недавно на мсдн читал как раз про мигание анимации, но не могу найти. Там было написано, что если миагет, то надо использовать какой-то механизм языка. То ли EventTrigger , то ли что-то еще, и типа он специально заточен под то, чтобы хорошо отображалась анимация.
Извиняюсь заранее, если пускаю по ложному следу, но покопайте мсдн на этот предмет.
0
Naomis
7 / 7 / 4
Регистрация: 11.03.2015
Сообщений: 212
Завершенные тесты: 1
01.02.2018, 12:23  [ТС] 5
SatanaXIII, спасибо , посмотрю.
0
01.02.2018, 12:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2018, 12:23

Форма регистрации wpf(xaml)
Доброго времени суток всем участникам форума. Кто-нибудь может помочь сделать такую же форму...

Плавное появление формы WPF XAML
Перешел с Windows Forms на WPF сразу столкнулся с проблемой. Плавное появление формы в WPF. В вин...

WPF! XAML template via DevExpress Grid
Добрый день уважаемы коллеги программисты, Помогите роздуплить как сделать одну задачку для когото...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru