|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||||||||||||||||
Странная ошибка привязки при использовании Path в шаблоне элемента ItemsControl07.02.2022, 20:02. Показов 3743. Ответов 25
Метки нет (Все метки)
Исходные данные:
1. Дефолтный WPF-проект из шаблона VS. 2. Добавлена разметка для 'ItemsControl' и две простые VM. Результат в рантайме: 1. Привязки работают, проект не падает, в канвасе фигуры отрисовываются. В т.ч. динамически обновляются, если реализовать INPC для VM. 2. Но при этом в рантайме множество ошибок в output (и новая Студия их ещё в отдадочной WPF-панельке подсвечивает в категории "binding failures"). Почему так и как правильно прописать привязки, чтобы не было ошибок? Поначалу думал, что это 'Fody' что-то ломает, или 'DataContext' поздно инициализируется, но нет, даже на минимальном проекте повторяется, даже если 'DataContext' присвоить первой же строкой в конструкторе.
0
|
||||||||||||||||
| 07.02.2022, 20:02 | |
|
Ответы с готовыми решениями:
25
Ошибка при использовании path Странная ошибка при использовании метода erase Строки: странная ошибка при использовании find (Error C2678) |
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 08.02.2022, 14:38 [ТС] | ||
|
Но вариант с ListBox не подходит, т.к. в этом случае при наведении/клике событие уходит именно в прямоугольник айтема ListBox (и круг подсвечивается квадратом), а мне надо, чтобы на события (например, наведения мышки или клика) реагировала именно сама нарисованная фигура по её реальным границам. Ну и если они перекрываются, например, если добавить ещё и линию, то с ListBox поведение совсем станно выглядит и линия может своим прямоугльником айтема полностью перекрыть другую фигуру, которая рядом с ней находится (но даже не пересекается с ней).
0
|
||
|
Модератор
|
|||
| 08.02.2022, 14:53 | |||
|
Канвас единый для всех. Проблема в самих итемах. Так как точка 0,0 всегда неявно входит в геометрию, то общий размер элемента (итема) определяется с учётом начала координат. Поэтому получаются итемы в которых есть большая прозрачная часть от начала координат. Когда создаёте геометрию, то лучше чтобы начало координат всегда было её частью. Тогда итемы будут иметь размер равный размеру геометрии. Но в этом случае их придётся позиционировать другими способами. Самый типичный - это смещение в Canvas. Но так же иногда используют маргины и трансформацию. Но их нужно применять к самим итемам, а не к их содержимому, то есть к геометрии и фигурам. Добавлено через 8 минут С ItemsControl происходит тоже самое, просто вы не видите явного размера итема. Но там также происходит их наложение друг на друга. В какой-то компоновке это не создаёт проблем, но в других создаёт. В том же ListBox вы можете стилизовать итем так, чтобы он обводил контур не прямоугольнику, а по элементу непосредственно или с неким отступом. То есть реализаций можно придумать множество, но это не значит что изначально можно неправильно создавать сами фигуры (содержимое итемов). Ведь поведение итемов у вас одинаковое для всех фигур, поэтому все события, действия нужно отрабатывать на уровне итема, а не его содержимого. Со своим содержимым пусть работает сам итем.
1
|
|||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||||||||||
| 08.02.2022, 15:00 [ТС] | |||||||||||
|
Да, всё, разобрался. Ключевой момент - что именно двигать. И без явного отображения рамок это совершенно не очевидно.
V1
1
|
|||||||||||
|
Модератор
|
||
| 08.02.2022, 15:26 | ||
|
Поэтому в инете очень много примеров подобных вашему варианту. Они проще реализуются. Но когда из-за этого возникают проблемы, то куча вопросов: "А почему так? Я же всё по примеру делал!". Поэтому вам тоже советую НАУЧИТЬСЯ делать правильно и тогда вы сами сможете ОСОЗНАНО выбрать где можно "срезать углы" и сделать проще.
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 08.02.2022, 15:26 [ТС] | |
|
Элд Хасп
Хотя, тут ещё вопрос производительности нужно учитывать. Когда каждая фигура помещается в свой индвидуальный контейнер для позиционирования, то получается, что это удваивает количество UI-элементов (сама фигура + индивидуальный контейнер для неё, вместо просто растянутой фигуры с прозрачным кусом от начала координат).
0
|
|
|
Модератор
|
|||
| 08.02.2022, 15:35 | |||
|
А он всегда создаёт оболочку вокруг элементов коллекции. Так что этот второй элемент и так уже есть, нужно только правильно его стилизовать, чтобы он не был бесполезным грузом. WPF значительно шустрее Форм, но всё же это инструмент создания GUI, а не игровой движок. Если количество контролов будет исчисляться тысячами, то непременно будет тормозить, особенно, в динамике. Очень часто это бывает когда в DataGrid передают большие коллекции, так как каждая его строка это десятки, а иногда и сотни UI элементов.
1
|
|||
| 08.02.2022, 15:35 | |
|
Обнуление значения источника при использовании привязки OneWayToSource
ListBox дефолтная стилистика для ItemsControl.ItemTemplate и ItemsControl.ItemsPanel Ошибка при попытке привязки сокета Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|