Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 10
1

Как отменить запуск анимации в Style.ItemTemplate

17.01.2014, 17:40. Показов 1980. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Стоит такая задача: создается ListBox на основании шаблона из ResourceDictionary:

XML
1
2
3
4
5
<ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source=Style2.xaml"/>
    </ResourceDictionary.MergedDictionaries>
...
<ListBox ItemsSource="{Binding DataObject}" Style="{StaticResource ItemsList}" />
Данные полей из DataObject составляют значений элементов списка. Одно из них - изображение. И требуется при проведении мышью в области изображения - его увеличить, а при выходе мыши - возвращаться к изначальному состоянию. Сама эта задача - решена. Но имеется проблема "дрожания" картинки при зависании мыши чуть выше границы между изображениями (одна картинка увеличена, а нижняя - бьется туда-сюда).

Как можно устранить это? По идее, это можно было бы решить через обработку флагов в событиях, но как это сделать в XAML? Т.е. если за 1 секунду, мышь успела пройти через картинку и уйти - не выполнять ни увеличение, ни, естественно, обратную анимацию.

WPF лишь начинаю изучать и пока не могу найти решения. Пробовал прописать x:Class для словаря и повесить метод на MouseEnter, а уже в нем делать анимацию. И хотя анимация создается в коде, но она не применяется к объекту на деле.

Style2.xaml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<ResourceDictionary
    ...
x:Class="Style2">
...
<Style x:Key="ItemsList" TargetType="{x:Type ListBox}">
<Setter Property="ItemTemplate">
   <Setter.Value>
       <DataTemplate>
          <Image x:Name="Img" Source="{Binding Picture}" MouseEnter="Img_MouseEnter" >
 
          <!--Image.Triggers>
               <EventTrigger RoutedEvent="UIElement.MouseEnter" >                                        
                                        <BeginStoryboard >
                                            <Storyboard>
                                                <DoubleAnimation From="90" To="180" BeginTime="0:0:0.200" Duration="0:0:0.500" Storyboard.TargetName="sceneImg" Storyboard.TargetProperty="Width" />
                                            </Storyboard>
                                        </BeginStoryboard>
                                    </EventTrigger>
               <Image.Triggers/-->
...
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
Style2.xaml.cs
    public partial class Style2 : ResourceDictionary
    {
        public Style2()
        {
            InitializeComponent();
        }
        private void Img_MouseEnter(object sender, MouseEventArgs e)
        {          ...
            DoubleAnimation imgWidth = new DoubleAnimation()
            {
                From = 90,
                To = 180,
                BeginTime = beginTime,
                Duration = duration
            };
            Storyboard.SetTarget(imgWidth, (Image)sender);
            Storyboard.SetTargetProperty(imgWidth, new PropertyPath(Image.WidthProperty));
 
            Storyboard sb = new Storyboard();
            sb.Children.Add(imgWidth);
            sb.Begin();            
        }
     }

Или же можете подсказать, как обработать элементы этого ListBox как ListBoxItems? Не могу понять, как достучаться до них, чтобы повесить обработчики событий, т.к. в ListBox.Items находится мой объект, а вовсе не коллекция ListBoxItems. Чтобы было что-то подобное?
C++
1
2
3
4
 foreach (ListBoxItem item in listScenes.Items.SourceCollection)
            {
                item.MouseEnter += Img_MouseEnter;
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2014, 17:40
Ответы с готовыми решениями:

Как привязаться из ItemTemplate к свойству DataContext
Возможно нубский вопрос, но поиск увы не помог. Например, DataContext котрола установлен на объект...

Запуск анимации, записанной в триггере, из кода
После записи анимации в триггере, можно ли её запускать через код?

Запуск анимации после нажатия на кнопку
Здравствуйте, возникла такая вот проблема: есть анимация для нескольких объектов описанная в xaml....

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

2
Заблокирован
18.01.2014, 18:08 2
Здравствуйте!

Если актуально, посмотрите этот пример.
Вложения
Тип файла: zip ListBox Image items increasing on MouseEnter.zip (64.9 Кб, 59 просмотров)
2
87 / 87 / 36
Регистрация: 27.11.2011
Сообщений: 713
15.08.2014, 13:25 3
Водяной Змей, а такой вопрос как при выделении элемента оставить ширину как при наведении?и можно ли тоже самое с текстом сделать? заранее спасибо
0
15.08.2014, 13:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2014, 13:25
Помогаю со студенческими работами здесь

Как отменить запуск командной строки?
Здравствуйте, это мой первый опыт программирования под Виндовс. Напейсал программку &quot;для...

Как сделать автоматический запуск флеш анимации на странице?
Решил поставить флеш часы на сайт, но при перезагрузке или переходи на другу страницу сайта...

Как удалить стиль определенный между <style></style>
Привет. Есть тестовый пример : #foo{color:green;} &lt;div id=&quot;foo&quot;...

Запуск анимации
Доброго времени суток, нужен совет, или даже подсказка как правильно делать. В общем, котиться...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru