0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 49
|
|||||||||||
1 | |||||||||||
Кнопка с несколькими объектами Path05.12.2016, 22:22. Показов 4448. Ответов 25
Доброго времени суток.
Хотел бы открыть топик, в котором буду задавать вопросы более опытным коллегам и постить свой прогресс по теме, т.к. задача, хоть и тривиальная по идее, в реализации сильно отличается от большинства примеров и простых заданий, существующих на сайте и, как мне кажется, в будущем сможет помочь многим. Есть задача, создать WPF сложную кнопку почты, на которой вместо обычного текста будет присутствовать: - рисунок с изображением(2) (например конвертика); - на момент подгруздки писем поверх основного рисунка, в определенном красотой месте, крутится рисунок отображающий загрузку писем(3) (а-ля стрелочки в кружочке) - после загрузки, - текст отображающий сколько непрочитанных писем у пользователя(4), если они есть - анимация подсветки кнопки, если письма есть(5). После некоторого гугла было решено следующее: 1. Для применения собственных свойств к кнопке использовать стиль, в который поместить свои изыски со шрифтами и шаблон, содержащий вышеописанные дополнения. 2. В качестве основного рисунка был выбран векторный вариант картинки, реализованный с помощью объекта Path:
С векторным изображением в WPF, как кажется, проще работать т.к. сам WPF векторный, и, в частности, применять анимацию. (Так ли это?) Как видно из врезки кода выше, картинка создана с помощью встроенного языка описания геометрии, сведения о котором, в целом, найти не сложно. 3. В качестве рисунка на момент загрузки, выбран следующий рисунок
4. Для отображения информации о полученных письмах видится создание контейнера, в который ляжет картинка для красивости фона и TextBlock для отображения количества писем. Чтобы иметь возможность удобно засылать контент думалось создать свойство зависимости, отвечающее за текст в TextBlock 5. Для создания анимации думал создать в шаблоне триггер, отвечающий за свойство Fill элементов типа Path и событие, которое будет его включать. Собственно вопросы: Есть ли какие-то реальные примеры подобного контрола? (В интернете в основном либо куски, либо простые примеры. Это, отчасти и послужило толчком для написания поста.) Как будет лучше организовать структуру такого контрола? Вопрос, на котором я повис на данном этапе - Как правильно группировать элементы типа Path в одну структуру? По мере продвижения, буду скидывать реализацию, может что-то поправят, или кому-то пригодится. Код стиля, который есть сейчас приаттачил как .log файл. Большое спасибо за помощь.
0
|
05.12.2016, 22:22 | |
Ответы с готовыми решениями:
25
[WPF] "Path" является неоднозначной ссылкой между "System.Windows.Shapes.Path" и "System.IO.Path" Работа с несколькими jquery-объектами Децентрализованное управление несколькими объектами Работа с несколькими объектами на форме |
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 49
|
|
12.12.2016, 14:15 [ТС] | 21 |
Спасибо большое.
Ошибки исчезли после того, как унаследовал целевой класс от класса Button. Ранее было наследовано от UIElement. При сборке, видимо, чего-то не хватало, класс не собирался и это интерпретировалось как ошибка XAML, наверное потому, что intelisence не видел сигнатуры целевого класса. Сейчас буду курить почему именно Button. Добавлено через 30 минут Посмотрев структуру классов, стало ясно, что наследоваться от UIElement смысла нет и проблема была в том, что в этом классе не определены почти никакие свойства, относящиеся к какому-либо конкретному контролу. На данный момент, унаследовался от класса Control ниже по иерархии наследования.
0
|
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 49
|
|
13.12.2016, 21:18 [ТС] | 22 |
А можно управлять этим экземпляром ресурса из ContentControl'a через, например, триггеры?
Например, поменять ему свойство Fill?
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
14.12.2016, 10:38 | 23 |
Вообще я не видел, чтобы кто-то делал представленным способом. Всё содержимое ControlTemplate описывается прямо в нём. Вы писали, что ваш Path - это ресурс, значит вы хотите, использовать его с нескольких местах. Но поскольку Path - это ресурс, то изменение его будет применяться ко всем местам, где он будет использоваться. Это точно то, что вам нужно? Может быть будет лучше просто прописать Path непосредственно в ControlTemplate?
Я не знаю специфики вашей задачи. Просто описал своё видение.
1
|
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 49
|
|||||||||||||||||||||
15.12.2016, 13:38 [ТС] | 24 | ||||||||||||||||||||
Есть еще вопрос по теме: Есть ли способ применить анимацию, объявленную в ресурсе к разным объектам?
Воможно ответ кроется где-то на поверхности, но гугл показывает какие-то страшные манипуляции, аж не по себе Например. Есть шаблон для кнопки, в нем размещен контейнер и объекты типа Path:
Эксперименты с Blend показали, что тамошний генератор всегда создает элемент ColorAnimationUsingKeyFrames заточенный под конкретный объект, путем задания параметров, типа таких:
Как и что необходимо модифицировать, чтобы имелась возможность использовать Storyboard для разных объектов одного типа? Спасибо.
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
15.12.2016, 14:06 | 25 |
Я с анимациями сам сало работал, может, чего не знаю. Но можно, как вариант, брать Storyboard-ресурс и запускать его.
Попробуйте создать свой наследник TriggerBase<>, который будет вызывать запуск анимации. Передавайте ему значения: EventTargetObject, RoutedEvent, Storyboard, StoryboardTargetObject. Попробуйте покопать у этом направлении. Или, может, кто-то более опытный в деле анимаций подскажет.
0
|
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 49
|
||||||
15.12.2016, 16:18 [ТС] | 26 | |||||
Вы говорите о коде C#. Я же думал, может быть, существует решение, при котором получится это сделать средствами XAML.
Нашел достаточно интересное решение, но оно относится не к шаблону, а к стилю и мной еще не опробовано. Судя по всему, человек сделал прокладку в виде Объекта UIElement и свойства Opacity.
Должно же быть какое-то решение вопроса)
0
|
15.12.2016, 16:18 | |
15.12.2016, 16:18 | |
Помогаю со студенческими работами здесь
26
Как уменьшить расстояние между несколькими объектами? Буфер трафарета для сцены с несколькими объектами Инициализация вектора с несколькими типами данных или объектами класса Разработать программу, которая моделирует определенную последовательность действий с несколькими объектами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |