Вопрос по wpf, xaml, .net, canvas – Сетка против холста

11

Я ищу мнение об использовании панелей Canvas и Grid в WPF. Мне нужно сделать классические формы ввода, которые имеют в основном макеты сетки, некоторые могут иметь небольшие сетки данных внутри, групповые блоки, но все выровнены в макете сетки. Я пытаюсь использовать панель «Сетка» или «Холст» для всех моих форм. Сетка дает мне хорошую структуру; Я могу упростить выравнивание элементов управления & # xAC ;. У меня будет базовый класс (который наследует класс Window) для всех окон, поэтому конструктор в Visual Studio будет бесполезен, поскольку у него есть проблемы для такого рода наследования, а с панелью Grid мне даже не нужен конструктор, и Я могу установить окно SizeToContent, чтобы все подходило. Но опять же с Canvas у меня есть возможность позиционировать элементы управления так, как мне нравится, и это единственное преимущество, которое я вижу при использовании Canvas.

У меня не было такого большого опыта в WPF, чтобы предсказать, какие проблемы я могу получить по запросам клиентов на макете. В веб-формах я иногда использую абсолютное позиционирование для форм на случай, если у клиента есть какие-то & # x201C; особые & # x201D; запросить, иметь ли контрольный пиксель вправо или влево выше и т. д. каждый работал с требовательными клиентами, понимая, о чем я.

Мне бы хотелось узнать, что вы думаете о том, каковы плюсы и минусы как в построении макета формы бизнес-приложения? Почему один лучше другого? Есть ли случаи, когда одной панелью было бы плохо пользоваться, а другой нет? Каковы недостатки одной панели к другой? Какую панель вы бы использовали?

Спасибо

Ваш Ответ

5   ответов
16

больше всего на свете. Сетка, безусловно, лучший выбор для настройки макета.

Error: User Rate Limit Exceededwpftutorial.net/GridLayout.html
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmsdn.microsoft.com/en-us/library/ms745058.aspx
0

вы все равно можете использовать визуальный дизайнер XAML для создания / редактирования содержимого вашей сетки.

Одним из основных преимуществ UX в WPF / SL / XAML является HTML-подобный «жидкость». Возможность макета. Даже при том, что вам может не понадобиться это с вашим текущим дизайном, это определенно будущее, и его стоит научиться ловко использовать

Проверьте превосходный список Роба РелииXAML редакторы

Error: User Rate Limit Exceeded
2

Сетки, кажется, то, что вам нужно для ваших требований.

Я бы сравнил Grids с таблицами в html (очень полезно при правильном использовании), тогда как Canvas больше похож на div. Разница в том, что таблицы - это то, какие таблицы должны быть в HTML, а также с div-ами против Canvas.

Что касается сетки, найдите время, чтобы определить ваши RowDefinitions и ColumnDefinitions, вместо того, чтобы размещать поля на ваших элементах управления, чтобы все правильно расположить. Вы пожалеете об этом, если не делаете этого.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

насчет просмотра наследства. Дизайнер Visual Studio в UWP, WPF генерирует код поддержки для базы и подкласса с одинаковыми именами методов. Он не компилируется.

Так как я предварительно датирую дженерики, мы можем вернуться к предыдущим методологиям. Одним из них является вспомогательный класс. Каждый вид реализуетIBaseView и имеет свойствоViewHelper или жеViewHelper<T>. enum ViewHelperOptions вполне может понадобиться. При необходимости каждый из ViewHelpers может использовать наследование, не нарушая Visual Designer. Это позволяет использовать как общий код, так и специальный код представления, не нарушая модель MVVM. Давайте назовем его MVHVM, поскольку ViewHelper знает о ViewHelper. Это дополнительно отделяет V от VM.

Полная реализация может потребовать использованияActivator.CreateInstance, Другое соображение - это конструкторы, которые вызываются конструктором. Вы должны переместить все «будет аварийно, если не работает». код в инициализации порожден, скажем, от события Loaded. В качестве альтернативы вы можете использовать (UWP):

if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{ DoStuffWhichShouldOnlyBeDoneAtRunTime(); }
3

новке сетки, ширине столбца / строки, ширине, высоте и т. Д.

По моему мнению, было бы легче сделать расположение различных элементов на сетке, управляя размером строки и столбцаzz, чем делать все, что жестко закодировано в холст. Это также облегчит задачу, если они решат изменить разрешение позже в будущем.

От Адама НатанаWPF Unleashed (стр. 168):

Mimicking a Canvas with Grid If you leave Grid with a single row and column and set the HorizontalAlignment and VerticalAlignment of all children to values other than Stretch, the children get added to the single cell just like a Canvas. Setting HorizontalAlignment to Left and VerticalAlignment to Top is like setting Canvas.Left and Canvas.Top to 0. Setting HorizontalAlignment to Right and VerticalAlignment to Bottom is like setting Canvas.Right and Canvas.Bottom to 0. Furthermore, applying Margin values to each element can give you the same effect as setting Canvas’s attached properties to the same values.

Вы также можете проявить творческий подход к содержанию элементов управления в сетке, чтобы получить более точный уровень управления макетом.

Холст был бы хорош для чего-то вроде диалогового окна, которое редко изменяет размер, и имеет только несколько элементов управления, потому что это потребует много времени, чтобы выложить их все по мере роста числа.

Я лично использую сетки самостоятельно. Это может быть немного больше работы, чтобы выложить вещи на уровне пикселей, но в течение 5% времени, которое необходимо, это стоит того, чтобы абстрагироваться от многих хлопот. Также хорошо, когда есть необходимость изменить размеры строк и столбцов на лету, GridSplitter делает это несложно.

Похожие вопросы