Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как запустить анимацию дочернего контрола по событию в родительском контроле? / 11 сообщений из 11, страница 1 из 1
11.02.2013, 13:03
    #38145896
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Есть док-панель, в ней кнопка. Хочу, чтобы кнопка плавно появлялась (через свойство прозрачности), когда мышь попадает на док-панель, и плавно исчезала, когда мышь уходит из док-панели.
...
Рейтинг: 0 / 0
11.02.2013, 13:07
    #38145906
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
И да, такое поведение должно быть шаблонным - т. е. чтобы можно было поместить в словарь ресурсов и применять к любым дочерним контролам в виде там стиля или шаблона.
...
Рейтинг: 0 / 0
11.02.2013, 17:00
    #38146469
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Ладно, к чёрту шаблонное поведение - просто анимировать дочерний элемент при событии в родительстком. Как?
...
Рейтинг: 0 / 0
11.02.2013, 18:11
    #38146633
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
user7320,

Ну и в чем проблема?
Создаешь анимацию для кнопки на основе свойства Opacity.
Делаешь триггер для твоей панели для событий MouseEnter и MouseLeave.
Ну и там по мелочи потом смотри - возможно тебе надо будет (когда разница временная между событиями MouseEnter и MouseLeave больше твоего Key в анимации) начать анимацию сначала или продолжить от текущего положения. Собственно можешь засунуть как в шаблон так и сразу в контрол.
Если будет очень тяжело - дерни - помогу, но только если ты будешь затягивать с этим - то помочь вряд ли получится
...
Рейтинг: 0 / 0
12.02.2013, 07:29
    #38147117
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
unknownfromrususer7320,

Ну и в чем проблема?
Создаешь анимацию для кнопки на основе свойства Opacity.
Делаешь триггер для твоей панели для событий MouseEnter и MouseLeave.
Ну и там по мелочи потом смотри - возможно тебе надо будет (когда разница временная между событиями MouseEnter и MouseLeave больше твоего Key в анимации) начать анимацию сначала или продолжить от текущего положения. Собственно можешь засунуть как в шаблон так и сразу в контрол.
Если будет очень тяжело - дерни - помогу, но только если ты будешь затягивать с этим - то помочь вряд ли получится
Не могли бы вы полный код привести? Анимацию я создал - хранить её надо только в сториборд, а она, в свою очередь, только в триггере события. Т. е. и триггер в кнопке надо делать. А как связать это с панелью?

Вот эта анимация работает только на кнопке, как сделать, чтобы она работала на кнопке, при событии на панели?

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<DockPanel Grid.Row="0" Grid.Column="0" >
  <Button 
    <Button.Triggers>
      <Trigger Property="Control.IsMouseOver" Value="true">
        <Trigger.EnterActions>
          <BeginStoryboard>
            <Storyboard >
              <DoubleAnimation Duration="0:0:0.100" To="1" Storyboard.TargetProperty="Opacity"/>
            </Storyboard>
          </BeginStoryboard>
        </Trigger.EnterActions>
        <Trigger.ExitActions>
          <BeginStoryboard>
            <Storyboard >
              <DoubleAnimation Duration="0:0:0.100" To="0" Storyboard.TargetProperty="Opacity"/>
            </Storyboard>
          </BeginStoryboard>
        </Trigger.ExitActions>
      </Trigger>
    </Button.Triggers>
  </Button>
</DockPanel>
...
Рейтинг: 0 / 0
12.02.2013, 07:37
    #38147121
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Там на самом деле исключение будет, т. к. в триггерах к кнопке только триггеры событий можно подключать. Но вот именно, что я и не знаю, как сделать.
...
Рейтинг: 0 / 0
12.02.2013, 08:14
    #38147136
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Фу ты, блин, нашёл:

Код: 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.
32.
<DockPanel Grid.Row="0" Grid.Column="0" Background="Transparent" >
  <Button 
    Name="aaa"
    DockPanel.Dock="Right"
  </Button>
  
  <DockPanel.Triggers>
    <EventTrigger RoutedEvent="DockPanel.MouseEnter">
      <BeginStoryboard>
        <Storyboard>
          <DoubleAnimation 
            Duration="0:0:0.100" 
            To="1" 
            Storyboard.TargetName="aaa"
            Storyboard.TargetProperty="Opacity"/>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
    <EventTrigger RoutedEvent="DockPanel.MouseLeave">
      <BeginStoryboard>
        <Storyboard>
          <DoubleAnimation 
            Duration="0:0:0.100" 
            To="0" 
            Storyboard.TargetName="aaa"
            Storyboard.TargetProperty="Opacity"/>
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>

  </DockPanel.Triggers>
</DockPanel>



Теперь как это сделать в шаблонном виде (но не обязательно через template, или даже лучше без template), чтобы я такую штуку мог к любому сочетанию панель-кнопка пременять - из словаря ресурсов, например, через стиль там или ещё чего?
...
Рейтинг: 0 / 0
12.02.2013, 08:17
    #38147140
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
И ещё такая проблема - при разметке, что выше, почему-то получается, что если у панели установлено свойство бэкграунда, то работает по всей панели, которая занимает место, отмеченное красным прямоугльником на рисунке ниже. А если не установлено, то только если мышь над надписью и самой кнопкой (отмечено синим). Почему так? Я в утилите Snoop (анализирует визуальное дерево контролов) посмотрел - там что с бэкграундом, что без него, панель занимает всегда место, отмеченное красным. Приходится устанавливать бэкграунд, хотя он мне не нужен.

...
Рейтинг: 0 / 0
13.02.2013, 09:41
    #38148884
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Проблему в предыдущем посте не решил, а с повторным использованием полученной анимации - только через ContentPresenter -> ContentControl или UserControl.
...
Рейтинг: 0 / 0
15.02.2013, 15:02
    #38152951
unknownfromrus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
user7320,

Гляну в выходные.Пока времени нет
...
Рейтинг: 0 / 0
15.02.2013, 16:55
    #38153188
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить анимацию дочернего контрола по событию в родительском контроле?
Я бэкграунд в Транспарент установил. Но всё равно интересно, почему без установки бэкграунда панель сжимается до своего контента, а с установкой - растягивается по всей доступной площади.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как запустить анимацию дочернего контрола по событию в родительском контроле? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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