|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
Здравствуйте! Помогите пожалуйста разобраться с концепцией. Имею следующую разметку с Frame-ом: <Window> <DockPane> ... <DockPanel DockPanel.Dock="Top"> <Frame x:Name="Browser" NavigationUIVisibility="Hidden" /> </DockPanel> </DockPanel> </Window> В данный Frame я выгружаю различные представления. Для себя поставил задачу реализовать всплывающее окно, с затемнением основного окна. И когда начал думать как это сделать, я несколько запутался в каком направлении идти. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2015, 18:01 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
NechtoЗдравствуйте! Помогите пожалуйста разобраться с концепцией. Имею следующую разметку с Frame-ом: <Window> <DockPane> ... <DockPanel DockPanel.Dock="Top"> <Frame x:Name="Browser" NavigationUIVisibility="Hidden" /> </DockPanel> </DockPanel> </Window> В данный Frame я выгружаю различные представления. Для себя поставил задачу реализовать всплывающее окно, с затемнением основного окна. И когда начал думать как это сделать, я несколько запутался в каком направлении идти. Я делаю по другому. Для затемнения формы лучше всего использовать Adorner. Само диалоговое окно я сделал как отдельный FrameworkElement, у этого элемента есть 2 свойства Content и ContentTemplate, Content это модель (View Model), ContentTemplate это шаблон DataTemplate. И свойство IsOpen, а так же CommandBinding для открытия по команде. В самом диалоговом окно содержимое можно задать в шаблоне, я для обработки нажатия кнопок использовать модель диалогового окна или маршрутизируемые команды (для 2ого, нужно сделать проброс команд из 1 окна в окно из которого открывается). Затем либо с помощью триггера, либо с помощью Binding'а, либо с помощью Command'ы можно открыть окно. Если открывать через команду можно передать модель в параметрах. Так же полезно будет создать свойство Style которое будет определять свойства открываемого (диалогового окна) Как сделать затемнение? При изменении свойства IsOpen, с помощью LogicalTree находите открытое окно. Это предпоследний элемент дерева, либо искать по типу Window. Затем создаем свой AdornerDecorator, этот базовый класс от Decorator, который в свою очередь наследуется от FrameworkElement, а значит и Visual. Суть этого элемента в том, что его можно разместить поверх другого контрола (так же как Focus или самый начальный Adorner окна. Внутри разместить Visual элемент с чёрным цветом и полной прозрачностью, а затем с помощью ColorAnimation снижаем прозрачность. Для производительность поверх черного квадрата можно создать квадрат с кистью VisualBrush, который будет копировать содержимое окна, тогда не будет постоянно видимых элементов управления. После того как IsOpen снова становится False, мы выполняем обратную анимацию и удаляем Adorner. Вот так. Код могу дать завтра, дома у меня нет, писать лень :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2015, 20:56 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
Буду очень признателен за код вашего велосипеда. А готовые велосипеды от есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2015, 07:21 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
Nechto, Можно же просто бэкграунд окна сделать прозрачным и черным, вот и будет затемнение что-то вроде такого: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Ну или можешь глянуть сюда http://mahapps.com/ там есть всплывашки ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2015, 09:35 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
maratossNechto, Можно же просто бэкграунд окна сделать прозрачным и черным, вот и будет затемнение что-то вроде такого: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Ну или можешь глянуть сюда http://mahapps.com/ там есть всплывашки Этот Dialog у mahapps, тоже самое что и Telerik http://docs.telerik.com/devtools/wpf/controls/radwindow/features/predefined-dialogs ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2015, 07:58 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
Просто затемнение для меня мало. Мне нужно чтобы накладывался затемненный прозрачный слой на всю рабочую область окна, тем блокировав все что находится по этим слоем. А на этом слое мне нужен слой в котором я могу отображать контролы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2015, 08:10 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
вот вам рабочий пример, за вас делать всё мне лень, разбирайтесь и делайте как вам удобнее. Лично я использую маршрутизируемые команды и самописный обвес для прослушивания этих команд и вызова соответствующих команд в ViewModel, их я в пример не привёл. Окно открывается по свойство IsOpen = true, либо по маршрутизируемой команде OpenDialog, которую надо передать в диалог. Стиль окна задается через WindowStyle, содержимое передается через ContentPresenter (содержимое, шаблонданных) Затемнение происходит именно так, как вам и нужно (на сколько я понял). View: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: 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.
ViewModel: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Control (Theme resource): Код: 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.
Control code: Код: 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. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187.
Код: 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.
будут вопросы, пишите ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2015, 10:51 |
|
Всплывающее окно с затемнением формы
|
|||
---|---|---|---|
#18+
NechtoПросто затемнение для меня мало. Мне нужно чтобы накладывался затемненный прозрачный слой на всю рабочую область окна, тем блокировав все что находится по этим слоем. А на этом слое мне нужен слой в котором я могу отображать контролы. Вот прозрачный затемненный фон, который блокирует все что сзади и непрозрачные контролы на нем, по которым можно щелкать. Или я неправильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2015, 13:27 |
|
|
start [/forum/topic.php?fid=21&msg=39044548&tid=1440802]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
122ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 243ms |
total: | 445ms |
0 / 0 |