BForm.xaml.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.Specialized;
  4. using System.Drawing;
  5. using System.Runtime.InteropServices;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Imaging;
  11. using System.Windows.Shapes;
  12. namespace WWPipeLine.WPF
  13. {
  14. /// <summary>
  15. /// BForm.xaml 的交互逻辑
  16. /// </summary>
  17. public partial class BForm : Window
  18. {
  19. readonly IResposeWPF m_IResposeWPF;
  20. public BForm(IResposeWPF respose)
  21. {
  22. InitializeComponent();
  23. Init();
  24. m_IResposeWPF = respose;
  25. }
  26. public System.Windows.Shapes.Ellipse EllipseAll
  27. {
  28. get
  29. {
  30. return m_EllipseAll;
  31. }
  32. }
  33. public System.Windows.Shapes.Ellipse EllipseWS
  34. {
  35. get
  36. {
  37. return m_EllipseDL;
  38. }
  39. }
  40. public System.Windows.Shapes.Ellipse EllipseYS
  41. {
  42. get
  43. {
  44. return m_EllipseDX;
  45. }
  46. }
  47. public System.Windows.Controls.Image ImageInfo
  48. {
  49. get
  50. {
  51. return m_ImageInfo;
  52. }
  53. }
  54. public System.Windows.Controls.Image ImagePan
  55. {
  56. get
  57. {
  58. return m_ImagePan;
  59. }
  60. }
  61. public System.Windows.Controls.Image ImageTerrain
  62. {
  63. get
  64. {
  65. return m_ImageTerrain;
  66. }
  67. }
  68. public void SetInfo(string infoName,NameValueCollection nvc)
  69. {
  70. if (this.Visibility == Visibility.Hidden) return;
  71. if (nvc.Count == 0)
  72. {
  73. m_InfoGrid.Visibility = Visibility.Hidden;
  74. return;
  75. }
  76. InfoScrollViewer.Height = this.m_InfoBorder.ActualHeight - 40;
  77. m_InfoGrid.Visibility = Visibility.Visible;
  78. m_InfoItems.Children.Clear();
  79. m_InfoTitle.Content = infoName;
  80. for (int i = 0;i < nvc.Count; i++)
  81. {
  82. string nvKey = nvc.GetKey(i);
  83. string nvValue = nvc.Get(i);
  84. WPF.PropertiesEx prop = new WPF.PropertiesEx(nvKey, nvValue);
  85. m_InfoItems.Children.Add(prop);
  86. }
  87. }
  88. private void SetImageSource(System.Windows.Controls.Image image,string fileName)
  89. {
  90. string path;
  91. if (!System.IO.File.Exists(fileName))
  92. {
  93. path = Commons.Paths.ApplicationResourcesDir + "\\" + fileName;
  94. }
  95. else
  96. {
  97. path = fileName;
  98. }
  99. Bitmap bitmap = new Bitmap(path);
  100. image.Tag = path;
  101. image.Source = BitmapToBitmapSource(bitmap);
  102. }
  103. void Init()
  104. {
  105. SetImageSource(m_ImageLogoBg, "BigScreen\\形状512.png");
  106. SetImageSource(m_ImageLogoICO, "BigScreen\\logo.png");
  107. SetImageSource(m_ImageTitle, "BigScreen\\云创经纬三维管线信息系统.png");
  108. SetImageSource(m_ImageChartTitle01, "BigScreen\\RightArrow.png");
  109. SetImageSource(m_ImageChartTitle02, "BigScreen\\RightArrow.png");
  110. SetImageSource(m_ImageChartTitle03, "BigScreen\\RightArrow.png");
  111. SetImageSource(m_ImageStaticsPanelIcon, "BigScreen\\EllipseDL-blue.png");
  112. SetImageSource(m_ImageExist, "exit.png");
  113. m_ImageExist.MouseUp += ImageExist_MouseUp;
  114. SetImageSource(m_ImageHome, "BigScreen\\ImageHome.png");
  115. m_ImageHome.MouseUp += ImageHome_MouseUp;
  116. m_ImageHome.MouseEnter += ImageButton_MouseEnter;
  117. m_ImageHome.MouseLeave += ImageButton_MouseLeave;
  118. SetImageSource(m_ImageInfo, "BigScreen\\ImageInfo.png");
  119. m_ImageInfo.MouseEnter += ImageButton_MouseEnter;
  120. m_ImageInfo.MouseLeave += ImageButton_MouseLeave;
  121. SetImageSource(m_ImagePan, "BigScreen\\ImagePan.png");
  122. m_ImagePan.MouseEnter += ImageButton_MouseEnter;
  123. m_ImagePan.MouseLeave += ImageButton_MouseLeave;
  124. SetImageSource(m_ImageTerrain, "BigScreen\\ImageTerrain.png");
  125. m_ImageTerrain.MouseEnter += ImageButton_MouseEnter;
  126. m_ImageTerrain.MouseLeave += ImageButton_MouseLeave;
  127. InfoScrollViewer.MouseEnter += InfoScrollViewer_MouseEnter;
  128. InfoScrollViewer.MouseLeave += InfoScrollViewer_MouseLeave;
  129. Grid oo = this.Content as Grid;
  130. UIElementCollection Childrens = oo.Children;
  131. foreach (UIElement ui in Childrens)
  132. {
  133. IEnumerable<Grid> gds = FindVisualChildren<Grid>(ui);
  134. foreach (var gd in gds)
  135. {
  136. if (gd.Tag != null && gd.Tag.ToString() == "BTN")
  137. {
  138. /*
  139. gd.MouseEnter += Grid_MouseEnter;
  140. gd.MouseLeave += Grid_MouseLeave;
  141. */
  142. }
  143. if (gd.Parent is StackPanel)
  144. {
  145. if ((gd.Parent as StackPanel).Name.StartsWith("TopContext"))
  146. {
  147. /*
  148. gd.Opacity = .5;
  149. gd.MouseEnter += Grid_MouseEnter;
  150. gd.MouseLeave += Grid_MouseLeave;
  151. */
  152. }
  153. }
  154. }
  155. IEnumerable<Ellipse> ee = FindVisualChildren<Ellipse>(ui);
  156. foreach (Ellipse e in ee)
  157. {
  158. if (e.Tag != null && e.Tag.ToString() == "TYPES")
  159. {
  160. e.Cursor = Cursors.Hand;
  161. if (e.Parent is Grid)
  162. {
  163. Grid g = e.Parent as Grid;
  164. string path = Commons.Paths.ApplicationResourcesDir + "\\BigScreen\\" + e.Name.Replace("m_", "") + ".png";
  165. g.Tag = path;
  166. e.MouseEnter += MenuMouseEnter;
  167. e.MouseLeave += MenuMouseLeave;
  168. e.MouseUp += MenuMouseUp;
  169. if (!System.IO.File.Exists(path)) continue;
  170. Bitmap bitmap = new Bitmap(path);
  171. g.Background = new ImageBrush(BitmapToBitmapSource(bitmap));
  172. }
  173. }
  174. }
  175. }
  176. }
  177. private void MenuMouseUp(object sender, MouseButtonEventArgs e)
  178. {
  179. Ellipse ell = sender as Ellipse;
  180. Grid g = ell.Parent as Grid;
  181. string defaultPath = g.Tag as string;
  182. string blueBg = defaultPath.Replace(".png", "-blue.png");
  183. SetImageSource(m_ImageStaticsPanelIcon, blueBg);
  184. }
  185. private void ImageButton_MouseLeave(object sender, MouseEventArgs e)
  186. {
  187. System.Windows.Controls.Image img = sender as System.Windows.Controls.Image;
  188. string defaultPath = img.Tag as string;
  189. Bitmap bitmap = new Bitmap(defaultPath);
  190. img.Source = BitmapToBitmapSource(bitmap);
  191. }
  192. private void ImageButton_MouseEnter(object sender, MouseEventArgs e)
  193. {
  194. System.Windows.Controls.Image img = sender as System.Windows.Controls.Image;
  195. string defaultPath = img.Tag as string;
  196. string bluePath = defaultPath.Replace(".png","-blue.png");
  197. Bitmap bitmap = new Bitmap(bluePath);
  198. img.Source = BitmapToBitmapSource(bitmap);
  199. }
  200. private void MenuMouseLeave(object sender, MouseEventArgs e)
  201. {
  202. Ellipse ell = sender as Ellipse;
  203. Grid g = ell.Parent as Grid;
  204. string defaultPath = g.Tag as string;
  205. Bitmap bitmap = new Bitmap(defaultPath);
  206. g.Background = new System.Windows.Media.ImageBrush(BitmapToBitmapSource(bitmap));
  207. }
  208. private void MenuMouseEnter(object sender, MouseEventArgs e)
  209. {
  210. Ellipse ell = sender as Ellipse;
  211. Grid g = ell.Parent as Grid;
  212. string defaultPath = g.Tag as string;
  213. string blueBg = defaultPath.Replace(".png","-blue.png");
  214. Bitmap bitmap = new Bitmap(blueBg);
  215. g.Background = new System.Windows.Media.ImageBrush(BitmapToBitmapSource(bitmap));
  216. }
  217. private void Grid_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
  218. {
  219. Grid gd = sender as Grid;
  220. gd.Opacity = .5;
  221. }
  222. private void Grid_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
  223. {
  224. Grid gd = sender as Grid;
  225. gd.Opacity = 1;
  226. }
  227. public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
  228. {
  229. if (depObj != null)
  230. {
  231. for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
  232. {
  233. DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
  234. if (child != null && child is T t)
  235. {
  236. yield return t;
  237. }
  238. foreach (T childOfChild in FindVisualChildren<T>(child))
  239. {
  240. yield return childOfChild;
  241. }
  242. }
  243. }
  244. }
  245. private void InfoScrollViewer_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
  246. {
  247. InfoScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
  248. }
  249. private void InfoScrollViewer_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
  250. {
  251. InfoScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;
  252. }
  253. private void ImageHome_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
  254. {
  255. this.m_IResposeWPF.ResposeWPF("VIEWENTIRE");
  256. }
  257. protected override void OnKeyUp(KeyEventArgs e)
  258. {
  259. base.OnKeyUp(e);
  260. if (e.Key == Key.Escape)
  261. this.Hide();
  262. }
  263. private void ImageExist_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
  264. {
  265. this.Hide();
  266. }
  267. //public DockPanel StackPanel01
  268. //{
  269. // get { return this.m_PanelLeftCahrt01; }
  270. //}
  271. public Grid StackPanel02
  272. {
  273. get { return this.m_PanelLeftCahrt02; }
  274. }
  275. public Grid StackPanel03
  276. {
  277. get { return this.m_PanelLeftCahrt03; }
  278. }
  279. public Grid StackPanel04
  280. {
  281. get { return this.m_PanelLeftCahrt04; }
  282. }
  283. [DllImport("gdi32.dll", SetLastError = true)]
  284. private static extern bool DeleteObject(IntPtr hObject);
  285. //将 Bitmap转换为BitmapSource
  286. //使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。
  287. private static ImageSource BitmapToBitmapSource(Bitmap bitmap)
  288. {
  289. IntPtr hBitmap = bitmap.GetHbitmap();
  290. ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
  291. hBitmap,
  292. IntPtr.Zero,
  293. Int32Rect.Empty,
  294. BitmapSizeOptions.FromEmptyOptions());
  295. if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。
  296. {
  297. throw new System.ComponentModel.Win32Exception();
  298. }
  299. return wpfBitmap;
  300. }
  301. }
  302. }