|
Анимация wpf
|
|||
---|---|---|---|
#18+
Добрый день. Подскажите пожалуйста с реализацией анимации. Создаю UserControl для анимации загрузки: Код: 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. 33. 34. 35. 36. 37.
В коде контрола пишу такой метод для запуска анимации: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Контрол размещаю в своем окне: Код: xml 1. 2. 3.
При запуске метода в главном окне Код: c# 1.
анимация не отрабатывает. Хотя если сделать все в xaml по триггеру события, например события загрузки, все работает: Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Но мне необходимо управлять запуском анимации в коде, не по событию. Подскажите, как правильно реализовать первый вариант, чтобы анимация отработала? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 11:33 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
запускайте анимацию не в конструкторе, а по маршрутизируемому событию Control.LoadedEvent. Оно возникает после расчета размеров, компоновки, рендеринга, связывания и прочего. Loaded += (source, p) => \\TODO; как то так ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 15:12 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
В том то и дело, что мне не нужно по событию. В общем виде мне нужен контрол для анимации какого-то продолжительного действия. У этого контрола нужны методы, типо BeginAnimation(), EndAnimation(). И в коде, когда мне нужно по логике, я запускаю эту анимацию, когда нужно прекращаю. По загрузке контрола все работает, последний пример, где все в разметке. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 15:41 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Oleg5555, нельзя через конструктор запустить анимацию, точка. вы говорите, что вам нужно при запуске, чтоб анимация уже работала. Приводите пример на XAML, где через это же самое событие запускаете анимацию сделайте методы запуска и остановки анимации и запустите её в событии Loaded. Когда вызывается конструктор класса, объект еще не "сформирован" по этому нет ни чего удивительно в том, что анимация идет лесом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 16:01 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Я не запускаю анимацию в конструкторе. И говорю как раз противоположные вещи. Мне как раз не нужно, чтобы при запуске анимация уже работала. При запуске она прекрасно работает. Но этого не нужно. Нужно следующее: 1. Пользователь открывает окно, на котором потом возможно будет запущена данная анимация. Все инициализируется. Пользователь что-то делает. 2. Далее пользователь выполняет команду, например кнопкой. Запускается какая-то логика. В коде эта логика анализируется, и при необходимости запускается анимация, типо this.CircularProgressBar.BeginAnimation(). 3. Далее эта логика работает какое-то время, отрабатывает, запускается типо this.CircularProgressBar.EndAnimation(). Анимация потухает. пользователь продолжает что-то делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 16:18 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Oleg5555, Код: 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.
попробуй так ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 16:36 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
К сожалению не работает. Немного по-другому написал Ваш код в проекте для примера, но смысл от этого не меняется. Пользовательский контрол, xaml: Код: 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. 33. 34. 35. 36. 37.
Пользовательский контрол, C#: Код: 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. 46. 47. 48. 49. 50.
Главное окно, xaml: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Главное окно, C#: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
В примере просто для примера повесил старт и стоп анимации на кнопки. Старт и стоп не работают. Можете подсказать, в чем может быть проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 20:32 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
вот вам рабочий пример: в примере 2 типа кнопок, 1 ряд кнопок включают и выключают анимацию по средствам XAML разметки, 2 ряд реализован в CodeBehind файле формы. Остальное делайте сами Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2016, 17:47 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Отлично. Спасибо. Мне интересен именно вариант со вторым рядом кнопок. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2016, 12:48 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Если кому интересно, для кругового прогресс бара можно использовать вот такой контрол (можно по-своему поэкспериментировать с анимацией или сделать несколько раскадровок в ресурсах и т.д.): 1. Контрол, XAML: Код: 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. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
2. Контрол, C#: Код: 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
3. Использование в своем окне, XML: Код: xml 1. 2. 3.
4. Использование в своем окне, C#: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2016, 14:00 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
для таких целей нужно использовать не UserControl, а Control, у вас же ProgressBar не имеет ContentPresenter'ов, а UserControl именно ContentControl (то есть контрол с содержимым). Не знаю, кто как, а я его крайне не люблю. Нет ничего лучше, чем просто создать класс на базе Control или базе другого существующего класса, задать стиль, шаблон и пользоваться. В методе GetMyStoryboard вся эта возня с эксепшенами избыточна, есть метод FindResource, если ресурс не будет найден, то исключение вызовется само по себе. + на такой случай как у вас, припасён класс ResourceReferenceKeyNotFoundException. Так же не совсем понятно, почему работает этот прогресс бар, только через код, такая реализация совершенно не подходит для шаблона MVVM, который в WPF используется повсеместно =) А сам контрол мне очень понравился, заберу к себе в копилку, если вы не против :) за одно и допилю ): ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2016, 14:55 |
|
Анимация wpf
|
|||
---|---|---|---|
#18+
Спасибо за комментарии, учту. Я так же использую WPF в паттерне MVVM, но в моей конкретной реализации понадобилось управлять контролом именно в коде. Да, забирайте. Если будет возможность, выложите пожалуйста свой, допиленный вариант. Хотелось бы изучить, расширить опыт. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.05.2016, 11:20 |
|
|
start [/forum/topic.php?fid=21&fpage=12&tid=1440670]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 167ms |
0 / 0 |