|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Вопрос простой и он был задан в заголовке. Далее что меня сподвигло его задать: Возьмём тот же гридпанель - создал четыре строки и три столбца. В них начал помещать компоненты. Наклепал интефрейс, всё тщательно расписал в xaml, у каждого компонента указал Grid.Row, Grid.Column, Grid.ColumnSpan, Grid.RowSpan Потом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели. Во всех компонентах каждый раз переписывать Grid.Row? А столбец с индексом 1 - это мне переписывать свойства Column и ColumnSpan во всех компонентах? Я напомню, что речь идёт о большой программе . Как правильно проектировать её интерфейс, чтоб не запутаться? А как решать проблему с невидимыми панелями? - ну, теми, которые пока что visible == hidden, которые должны отобразиться по ходу работы пользователя с программой в нужный момент? Насколько правильно я делаю, протыкивая многим "лишним" (мешающим) существующим компонентам visible = hidden (временно), чтобы правильно разместить новую панельку. А потом, когда я удовлетворён её размещением, её скрываю, и пробегаюсь по другим, делаю visible = true обратно на всех тех, что должны быть видны с самого начала. Короче, беготня по компонентам с целью изменить их свойство visible сначала в false, потом обратно в true при каждом новом добавлении (или изменении существующих) компонент мне немного поднадоела. P.S.p.s. под "панелями" я имею в виду любые компоненты. Просто называю их так потому что всякого рода textbox и т.п. я помещаю не непосредственно на MainForm, а создаю свои компоненты и пихаю их туда, чтобы логика этих компонент была внутри них. И каждый мой компонент представляет собой такую "панель" - либо с кнопками, либо там ещё с чем-нибудь... А есть некоторые "панели", которые предоставляют кнопочки для скрытия или открытия других панелей. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 00:41 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
В тексте выше под словом "visible" имеется в виду Visibility, а под словом hidden - collapsed. С непривычки перепутал. Вот, в userform я такой проблемы не испытывал, т.к. там все невидимые компоненты во время разработки отображаются на экране, а не скрываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 00:45 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
да блин userform - в смысле, winforms. Надо проспаться ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 00:45 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
есть еще UniformGrid, в нём не нужно использовать Grid.Row Ну и если сильно припёрло, напишите свою панель так, как вы её видите, в этом проблемы нет. написал уже не 1 проект, обычно работаю так: мне приносят макеты интефейса по макетам я делаю 1 наброски, на этом этапе как раз и задаются все гриды весь интерфейс я пишу в DataTemplate'ах, а не UserControl'а потом уже дорабатываю "помакетно" Не понял, зачем вы задаете Visbility при добавлении нового объекта. Если интерфейс предполагает наличии нескольких объектов 1 типа на панели, можно использовать ItemsControl, а в нём реализовать всю логику с Visibility. К сожалению, когда нужна сложная логика работы приходится писать контролы ручками ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 07:20 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Charles WeylandНаклепал интефрейс, всё тщательно расписал в xaml, у каждого компонента указал Grid.Row, Grid.Column, Grid.ColumnSpan, Grid.RowSpan Потом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели. Во всех компонентах каждый раз переписывать Grid.Row? А столбец с индексом 1 - это мне переписывать свойства Column и ColumnSpan во всех компонентах?+1 Больной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыль: Костыль для Grid Код: 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. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 08:46 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Roman MejtesНу и если сильно припёрло, напишите свою панель так, как вы её видите, в этом проблемы нет.Ну и сколько человекочасов ожидается потратить на написание аналога <table> + <tr> + <td> под WPF? Заняться-то больше нечем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 08:48 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Алексей КБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML Знаком. Есть там table - и заполняются там ячейки в момент их создания. А тут сначала кучу создал, потом по номерам обратился. И чем по-твоему это мне должно помочь? В том-то и дело, что если б работало как в html, я был бы счастлив! Если б сделали хотя бы доступ не по номерам, а по названиям колонок. Типа, Grid.Column ="colName" Grid.ColumnSpanTo="colSurname" Было бы зашибись. Сделал бы так, если б умел. Я пока только осваиваюсь в wpf, в связи с чем вопросы и задаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 09:25 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
А программулину, что ты скинул, вечером потестирую, как домой приеду... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 09:26 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Charles WeylandАлексей КБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML Знаком. Есть там table - и заполняются там ячейки в момент их создания.Ты один из авторов WPF? Это послание было обращено автору WPF Grid. Charles WeylandА тут сначала кучу создал, потом по номерам обратился. И чем по-твоему это мне должно помочь? В том-то и дело, что если б работало как в html, я был бы счастлив!Ниже реальный пример использования, Grid.Row и Grid.Col рассчитываются автоматически. Реальный пример формы редактирования. Код: 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. 62. 63. 64. 65. 66. 67. 68.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 09:33 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Алексей К , а, я в электричке читал, не увидел слова "автор". За пример большое спасибо!! Попробую обязательно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:17 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Ok :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:20 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
а можно глянуть скриншот, чтобы знать, что ожидать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:22 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:25 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Charles WeylandПотом бац! И понадобилось ввести ещё одну строку RowDefinition с индексом 0 в этой гридпанели.Часто использование DockPanel оправданнее и удобнее грида. Присмотрись к ней. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:30 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Да, где возможно, заменяю именно док-панелью. Кстати, у неё какой-то "глюк" есть. Создаю на ней две кнопки фиксированной ширины. Одну док=влево, другую док=вправо. Вторая располагается по середине. И ничего с ней не сделать. Пока дополнительно не создашь какой-нибудь <GridPanel />. Т.е. пока нет элемента, который заполнит собой всю оставшуюся область, размещённые на док-панели компоненты будут располагаться не там, где им полагается быть. Для меня это странно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:35 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
UniForm грид еще удобен для размещения кнопок, если Grid не растянут, а выравнен по краю, то его размер будет равен максимальному размеру 1 из содержимого * на количество клеток\строк. То есть все кнопки (например) будут 1 размера авторБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыльтут просто несколько разные подходы. для того, о чём вы пишите есть FlowDocument, где можно создать и таблицу в том числе, а в таблице разместить нужные элементы управления. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:51 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Charles WeylandВторая располагается по середине.самой кнопке задай выравнивание вправо ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 10:54 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
а, действительно. Хм. Хотя это тоже странно. Не понятно, чем объясняется свободное пространство правее кнопки. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 11:04 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
...хотя понял... две кнопки делят между собой панель пополам. И по умолчанию выравнивание идёт по левому краю. А раз я задал фиксированную ширину, то справа появилось свободное место. Спасибо) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 11:06 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Roman MejtesавторБольной на голову автор WPF-ной панели Grid видимо не был знаком с HTML. У нас для решения этой проблемы был написан следующий костыльтут просто несколько разные подходы. для того, о чём вы пишите есть FlowDocument, где можно создать и таблицу в том числе, а в таблице разместить нужные элементы управления.FlowDocument вроде как используется в основном для создания отчётности? Побочных эффектов в нём нет от встраивания в него "обычных" контролов? На первый взгляд вроде работает, но есть масса сомнений. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 11:15 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
Алексей КПонятно, что подход с Grid панель другой. Непонятно зачем он был предложен, когда есть более удобные альтернативы. Может, ради RowSpan и ColumnSpan? Я использую GridPanel по двум причинам: 1. равномерное растяжение всего содержимого 2. возможность вольного добавления элементов управления - одного в ячейке 1x1 (строка x столбец), другого чуть ниже, в ячейке 2x1, третьего в объединённой ячейке 1x1 ... 2x1, А четвёртого в объединённой ячейке вообще справа - 1x1 ... 1x3 Это, в частности, нужно для оформительских элементов управления (линий там.. ), фоновых логотипах. Но не только. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 11:35 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
кстати есть еще один изощренный способ про который не упоминают, обычно: это Grid.IsSharedSizeScope="True", DefinitionBase.SharedSizeGroup="GroupName" Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 12:24 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
А это вообще нормально, что XAML файл разрастается до нескольких тысяч строк? И, по ходу, с такими темпами за десятку уйдёт ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 13:25 |
|
Как на WPF создаёте сложные интерфейсы? (рассуждения, опыт)
|
|||
---|---|---|---|
#18+
я как-то привык к маленьким файлам. Если разрастается, то разделяю по разным файлам или даже проектам. И один файлик от 10 до 500 строк кода C# обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 13:26 |
|
|
start [/forum/topic.php?fid=21&fpage=10&tid=1440624]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 191ms |
0 / 0 |