powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Анимация закрытия окна
23 сообщений из 23, страница 1 из 1
Анимация закрытия окна
    #37804402
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите разобраться с закрытием окна. Хотелось сделать анимацию при открытии и закрытии окна, чтобы при открытии окно плавно появлялось из невидимости, а при закрытии наоборот. В первом случае проблем нет, такой триггер все делает на отлично:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Window.Triggers>
         <EventTrigger RoutedEvent="Window.Loaded">
             <EventTrigger.Actions>
                 <BeginStoryboard>
                     <Storyboard>
                         <DoubleAnimation From="0" To="1" Duration="0:0:0.5"
                                          Storyboard.TargetName="ContentLayout"
                                          Storyboard.TargetProperty="Opacity"/>
                     </Storyboard>
                 </BeginStoryboard>
             </EventTrigger.Actions>
         </EventTrigger>
     </Window.Triggers>



Но при попытке повесить триггер с обратной анимацией на событие Window.Closed возникает исключение.
Помогите решить проблему.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804417
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

исключение покажи.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804423
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Показываю

System.Windows.Markup.XamlParseException occurred
Message='Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception.' Line number '17' and line position '10'.
Source=PresentationFramework
LineNumber=17
LinePosition=10
StackTrace:
at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
at WpfApplication1.MyWindow.InitializeComponent() in d:\Projects\Book C#\WPF\WpfApplication1\WpfApplication1\MyWindow.xaml:line 1
at WpfApplication1.MyWindow..ctor() in D:\Projects\Book C#\WPF\WpfApplication1\WpfApplication1\MyWindow.xaml.cs:line 23
InnerException: System.NotSupportedException
Message=RoutedEventConverter cannot convert from System.String.
Source=System
StackTrace:
at System.ComponentModel.TypeConverter.GetConvertFromException(Object value)
at System.Windows.Markup.RoutedEventConverter.ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, Object source)
at System.Windows.Baml2006.TypeConverterMarkupExtension.ProvideValue(IServiceProvider serviceProvider)
at MS.Internal.Xaml.Runtime.ClrObjectRuntime.CallProvideValue(MarkupExtension me, IServiceProvider serviceProvider)
InnerException:
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804427
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

покажи что там на 17 строчке и сам документ, который содержит эту строчку.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804444
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

авторна событие Window.Closed возникает исключение
может лучше использовать Window.Unloaded ?
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804454
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тут как раз объявление триггера. Вот весь код окна

Код: xml
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.
<Window x:Class="WpfApplication1.MyWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Title="MyWindow" Height="300" Width="300">
     <Window.Triggers>
         <EventTrigger RoutedEvent="Window.Loaded">
             <EventTrigger.Actions>
                 <BeginStoryboard>
                     <Storyboard>
                         <DoubleAnimation From="0" To="1" Duration="0:0:0.5"
                                          Storyboard.TargetName="ContentLayout"
                                          Storyboard.TargetProperty="Opacity"/>
                     </Storyboard>
                 </BeginStoryboard>
             </EventTrigger.Actions>
         </EventTrigger>
         <EventTrigger RoutedEvent="Window.Closed">
             <EventTrigger.Actions>
                 <BeginStoryboard>
                     <Storyboard>
                         <DoubleAnimation From="1" To="0" Duration="0:0:0.5"
                                          Storyboard.TargetName="ContentLayout"
                                          Storyboard.TargetProperty="Opacity"/>
                     </Storyboard>
                 </BeginStoryboard>
             </EventTrigger.Actions>
         </EventTrigger>
     </Window.Triggers>
     <Grid x:Name="ContentLayout">
     </Grid>
 </Window>



А вот она 17 строка
<EventTrigger RoutedEvent="Window.Closed">
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804471
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

"Window.Closed" откуда взял это название?
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804479
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из списка событий окна.
Начинаю понимать, Window.Closed это не маршрутизируемое событие, а я пытаюсь на него повесить триггер, поэтому и вылезает исключение.
Тогда как правильно сделать обработку закрытия окна?
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804511
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

вообще, как тебе подсказали выше, лучше не на closed, потому что там уже ничего нету, как я помню из аналогии winforms.
поэтому поднимись выше до unloaded.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804525
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не заметил сообщение про Unloaded.
Но в любом случае оно не катит, я так понимаю что оно возникает уже после закрытия окна, а мне нужно как раз перед закрытием.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804535
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

Closing?
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804539
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lelouch,

Closing тоже не маршрутизируемое событие, такое же исключение как и Closed
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804542
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

ты тогда, просто, запиши код, на событии closing , который дергает storyboard и все.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804664
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiK,
Вот такой код все равно не срабатывает, окно закрывается без вской анимации
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            DoubleAnimation anim = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(2)));
            Storyboard storyboard = new Storyboard();
            Storyboard.SetTargetName(anim, "ContentLayout");
            Storyboard.SetTargetProperty(anim, new PropertyPath(UIElement.OpacityProperty));
            storyboard.Children.Add(anim);
            storyboard.Begin(ContentLayout);
        }



пробовал перекрыть метод OnClosing
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            DoubleAnimation anim = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(2)));
            Storyboard storyboard = new Storyboard();
            storyboard.Completed += (sender, args) => base.OnClosing(e);
            Storyboard.SetTargetName(anim, "ContentLayout");
            Storyboard.SetTargetProperty(anim, new PropertyPath(UIElement.OpacityProperty));
            storyboard.Children.Add(anim);
            storyboard.Begin(ContentLayout);
        }



но тоже не работает.
Но вобще хотелось бы все это сделать разметкой xaml.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37804847
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

ну это.
а если смекалку включить?
в closing делаешь e.cancelevent=true
запускаешь анимацию.
закрываешь окно еще раз кодом.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805096
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось только добавить на форму кнопку с таким обработчиком
Код: c#
1.
2.
3.
4.
5.
6.
7.
        private void button1_Click(object sender, RoutedEventArgs e)
         {
             DoubleAnimation anim;
             anim = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(1)));
             anim.Completed += (s, a) => Close();
             this.BeginAnimation(Window.OpacityProperty, anim);
         }



С перехватом события Closing ничего у меня не получилось.
Уважаемый AlexeiK, может подскажете как это должно правильно выглядеть?
Следующий код приводит к тому что окно уходит в прозрачность но не закрыватеся
Код: c#
1.
2.
3.
4.
5.
             e.Cancel = true;
             DoubleAnimation anim;
             anim = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(1)));
             anim.Completed += (s, a) => e.Cancel = false;
             this.BeginAnimation(Window.OpacityProperty, anim);



Но и все таки, хотелось бы узнать, возможно ли такое сделать с помощью триггера, а не в коде.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805181
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

авторanim.Completed += (s, a) => e.Cancel = false;
по вашему WPF синхронен?
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805341
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

как тебе выше сказали. ты почти у цели.
только вот e.cancel=false это не то.
вот вместо e.cancel=false поставь this.close .
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805406
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiK,
this.Close(); даст только то, что окно будет моргать бесконечно а не закрываться.
Ну сами посмотрите , сначала мы присваиваем e.Cancel = true, потом в процессе вызываем Close(), и все начинается по новой.
Код: c#
1.
2.
3.
4.
5.
             e.Cancel = true;
             DoubleAnimation anim;
             anim = new DoubleAnimation(1.0, 0.0, new Duration(TimeSpan.FromSeconds(1)));
             anim.Completed += (s, a) => this.Close();
             this.BeginAnimation(Window.OpacityProperty, anim);
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805414
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

ну че смекалка не пашет да? :)
сделай bool smartflag=false;
при входе если smartflag=true то пропускай весь свой код в closing, если false то исполняй.
меняй значение smartflag на true когда анимация закончится.

гость, ты иди поспи как человек. поешь белков.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805524
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, конечно за ответы, но я только начал изучать WPF, поэтому и обратился, чтобы мне внятно объяснили, а не тренировали мою смекалку.
Без флагов что никак нельзя?
Должно же быть какое то решение по аналогии с триггером на Loaded
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805555
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_гость?_,

аналогии между loaded и unloaded нету.
так как при том событии уничтожается объект.
а при loaded он создается.
с уничтоженным объектом производить анимацию смысла нету.
...
Рейтинг: 0 / 0
Анимация закрытия окна
    #37805606
_гость?_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ясно, спасибо
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Анимация закрытия окна
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]