|
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
|
||||||
WPF Использование Canvas как основного контейнера30.09.2022, 11:39. Показов 722. Ответов 9
Здравствуйте. Не помню где, но слышал, что использование Canvas как основного контейнера, когда мы не оборачиваем его в Grid или какой-то еще контейнер в приложении WPF - плохая идея. Но почему? Понятное дело, если мы работаем с окном переменного размера, Canvas не подойдёт. Но если размер окна в приложении не будет меняться? Тогда Canvas будет допустимым решением? Или у этого решения все же могут быть свои подводные камни?
Добавлено через 11 минут Для большей понятности, что я подразумеваю под основным контейнером:
0
|
||||||
| 30.09.2022, 11:39 | |
|
Ответы с готовыми решениями:
9
WebBrowser, использование cookies из основного браузера Использование SD флешки в качестве основного накопителя в ноутбуке Использование стороннего контейнера |
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 30.09.2022, 15:48 | |
|
Rhoxolan, ну а губку, для мытья посуды, обратной стороной будем использовать, как наждачную бумагу по дереву, -- в чём проблема, собственно?
0
|
|
|
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
|
||
| 30.09.2022, 23:07 [ТС] | ||
|
Соответственно, вы ведете к тому, что использовать Canvas - более трудоёмкая задача? Но, повторюсь, я про ситуации, когда размер окна будет постоянным. И, наверное, я не до конца раскрыл свою мысль в вопросе - я не про ситуации со сложным интерфейсом, где будут использоваться панели с кнопками или что-то еще, где использование Grid-а напрашивается само собой. Я скорее спрашиваю про ситуации, когда речь идет о очень простом приложении, где на окне, ну допустим, 5 кнопок и пару полей для ввода/вывода. Чем Canvas плох для таких ситуаций?
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 30.09.2022, 23:41 | |
Сообщение было отмечено Rhoxolan как решение
Решение
Rhoxolan, я веду к тому, что для всего свой функционал.
Смотря на Ваш код я задаюсь вопросом: зачем использовать Canvas.Left="10" Canvas.Top="10" вместо Margin="10,10"? Меняем на Margin и тут же второй вопрос: если у нас нет Canvas.Top и Canvas.Left, зачем нам Canvas? -- меняем на Grid.Вот и вся логическая цепочка. Теперь из различий Grid и Canvas. Раз -- Canvas значительно тяжелее. Два -- в Grid есть RowDefenition и ColumnDefenition, что в Вашей реализации с большей вероятностью пригодится, чем Canvas.Top и Canvas.Left. Три -- размер окна у Вас то может быть и статический, но вот экран -- нет. Тут ещё важную роль отыгрывает Dpi. В итоге Вы всё равно сталкнётесь с расхожедниями на разных мониторах. Не проверял, но это имхо.
1
|
|
|
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
|
|||
| 01.10.2022, 00:04 [ТС] | |||
|
Но в любом случае:
0
|
|||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 01.10.2022, 00:58 | ||
|
Посмотрим что ответит и верны ли мои догадки.
0
|
||
|
Модератор
|
|||||||
| 01.10.2022, 01:30 | |||||||
Сообщение было отмечено Rhoxolan как решение
Решение
Rhoxolan, WPF отличается от Форм (в том числе) адаптивной разметкой.
То есть компоновка в нём должна быть "резиновой", относительной. В вашем примере вы хотите задать "жёсткую" компоновку Окна постоянного размера. НО! Стиль Окна по умолчанию определятся темой ОС. И в одном и том же приложении, но запускаемом, например в Win7 и Win10 вы получите визуально разные Окна. Тоже самое может произойти при запуске на разных устройствах, разных мониторах. В том числе, как упомянул limeniye, из-за разного DPI. А что для разметки означает разный стиль Окна? Это может изменить размер КЛИЕНТСКОЙ области Окна. То есть для окна с размерами Height="600" Width="500" вы можете получить разные размеры <Canvas>. Соответственно ваша "жёсткая компоновка" будет искажена: могут появиться ненужные поля или наоборот элементы "выедут" из зоны видимости.Вроде бы это можно исправить такой компоновкой:
Тема ОС может же поменять и шрифты по умолчанию, и стили элементов. Может потребоваться локализация выводимого текста на элементах. В результате вы можете получить разные размеры для дочерних элементов Canvas.Как тогда подстроить размеры Canvas под рантайм размеры дочерних элементов? Это можно, но достаточно сложно. Точно не для начинающих. Гораздо проще задать адаптивную разметку через Grid. Добавлено через 6 минут Мне кажется для построения компоновки Canvas самая простая панель. В ней же ничего не надо рассчитывать, она не зависит от дочерних элементов. Поэтому при вычислении компоновки проход по ним не требуется.
2
|
|||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 01.10.2022, 02:24 | ||
SnapsToDevicePixels="True"
0
|
||
|
13 / 13 / 7
Регистрация: 16.12.2020
Сообщений: 247
|
|
| 01.10.2022, 09:53 [ТС] | |
|
Элд Хасп, limeniye, спасибо.
0
|
|
| 01.10.2022, 09:53 | |
|
Помогаю со студенческими работами здесь
10
Использование контейнера list Использование контейнера ArrayList Использование контейнера map Использование IoC контейнера Использование контейнера map Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|