using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Drawing; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace WWPipeLine.WPF { /// /// BForm.xaml 的交互逻辑 /// public partial class BForm : Window { readonly IResposeWPF m_IResposeWPF; public BForm(IResposeWPF respose) { InitializeComponent(); Init(); m_IResposeWPF = respose; } public System.Windows.Shapes.Ellipse EllipseAll { get { return m_EllipseAll; } } public System.Windows.Shapes.Ellipse EllipseWS { get { return m_EllipseDL; } } public System.Windows.Shapes.Ellipse EllipseYS { get { return m_EllipseDX; } } public System.Windows.Controls.Image ImageInfo { get { return m_ImageInfo; } } public System.Windows.Controls.Image ImagePan { get { return m_ImagePan; } } public System.Windows.Controls.Image ImageTerrain { get { return m_ImageTerrain; } } public void SetInfo(string infoName,NameValueCollection nvc) { if (this.Visibility == Visibility.Hidden) return; if (nvc.Count == 0) { m_InfoGrid.Visibility = Visibility.Hidden; return; } InfoScrollViewer.Height = this.m_InfoBorder.ActualHeight - 40; m_InfoGrid.Visibility = Visibility.Visible; m_InfoItems.Children.Clear(); m_InfoTitle.Content = infoName; for (int i = 0;i < nvc.Count; i++) { string nvKey = nvc.GetKey(i); string nvValue = nvc.Get(i); WPF.PropertiesEx prop = new WPF.PropertiesEx(nvKey, nvValue); m_InfoItems.Children.Add(prop); } } private void SetImageSource(System.Windows.Controls.Image image,string fileName) { string path; if (!System.IO.File.Exists(fileName)) { path = Commons.Paths.ApplicationResourcesDir + "\\" + fileName; } else { path = fileName; } Bitmap bitmap = new Bitmap(path); image.Tag = path; image.Source = BitmapToBitmapSource(bitmap); } void Init() { SetImageSource(m_ImageLogoBg, "BigScreen\\形状512.png"); SetImageSource(m_ImageLogoICO, "BigScreen\\logo.png"); SetImageSource(m_ImageTitle, "BigScreen\\云创经纬三维管线信息系统.png"); SetImageSource(m_ImageChartTitle01, "BigScreen\\RightArrow.png"); SetImageSource(m_ImageChartTitle02, "BigScreen\\RightArrow.png"); SetImageSource(m_ImageChartTitle03, "BigScreen\\RightArrow.png"); SetImageSource(m_ImageStaticsPanelIcon, "BigScreen\\EllipseDL-blue.png"); SetImageSource(m_ImageExist, "exit.png"); m_ImageExist.MouseUp += ImageExist_MouseUp; SetImageSource(m_ImageHome, "BigScreen\\ImageHome.png"); m_ImageHome.MouseUp += ImageHome_MouseUp; m_ImageHome.MouseEnter += ImageButton_MouseEnter; m_ImageHome.MouseLeave += ImageButton_MouseLeave; SetImageSource(m_ImageInfo, "BigScreen\\ImageInfo.png"); m_ImageInfo.MouseEnter += ImageButton_MouseEnter; m_ImageInfo.MouseLeave += ImageButton_MouseLeave; SetImageSource(m_ImagePan, "BigScreen\\ImagePan.png"); m_ImagePan.MouseEnter += ImageButton_MouseEnter; m_ImagePan.MouseLeave += ImageButton_MouseLeave; SetImageSource(m_ImageTerrain, "BigScreen\\ImageTerrain.png"); m_ImageTerrain.MouseEnter += ImageButton_MouseEnter; m_ImageTerrain.MouseLeave += ImageButton_MouseLeave; InfoScrollViewer.MouseEnter += InfoScrollViewer_MouseEnter; InfoScrollViewer.MouseLeave += InfoScrollViewer_MouseLeave; Grid oo = this.Content as Grid; UIElementCollection Childrens = oo.Children; foreach (UIElement ui in Childrens) { IEnumerable gds = FindVisualChildren(ui); foreach (var gd in gds) { if (gd.Tag != null && gd.Tag.ToString() == "BTN") { /* gd.MouseEnter += Grid_MouseEnter; gd.MouseLeave += Grid_MouseLeave; */ } if (gd.Parent is StackPanel) { if ((gd.Parent as StackPanel).Name.StartsWith("TopContext")) { /* gd.Opacity = .5; gd.MouseEnter += Grid_MouseEnter; gd.MouseLeave += Grid_MouseLeave; */ } } } IEnumerable ee = FindVisualChildren(ui); foreach (Ellipse e in ee) { if (e.Tag != null && e.Tag.ToString() == "TYPES") { e.Cursor = Cursors.Hand; if (e.Parent is Grid) { Grid g = e.Parent as Grid; string path = Commons.Paths.ApplicationResourcesDir + "\\BigScreen\\" + e.Name.Replace("m_", "") + ".png"; g.Tag = path; e.MouseEnter += MenuMouseEnter; e.MouseLeave += MenuMouseLeave; e.MouseUp += MenuMouseUp; if (!System.IO.File.Exists(path)) continue; Bitmap bitmap = new Bitmap(path); g.Background = new ImageBrush(BitmapToBitmapSource(bitmap)); } } } } } private void MenuMouseUp(object sender, MouseButtonEventArgs e) { Ellipse ell = sender as Ellipse; Grid g = ell.Parent as Grid; string defaultPath = g.Tag as string; string blueBg = defaultPath.Replace(".png", "-blue.png"); SetImageSource(m_ImageStaticsPanelIcon, blueBg); } private void ImageButton_MouseLeave(object sender, MouseEventArgs e) { System.Windows.Controls.Image img = sender as System.Windows.Controls.Image; string defaultPath = img.Tag as string; Bitmap bitmap = new Bitmap(defaultPath); img.Source = BitmapToBitmapSource(bitmap); } private void ImageButton_MouseEnter(object sender, MouseEventArgs e) { System.Windows.Controls.Image img = sender as System.Windows.Controls.Image; string defaultPath = img.Tag as string; string bluePath = defaultPath.Replace(".png","-blue.png"); Bitmap bitmap = new Bitmap(bluePath); img.Source = BitmapToBitmapSource(bitmap); } private void MenuMouseLeave(object sender, MouseEventArgs e) { Ellipse ell = sender as Ellipse; Grid g = ell.Parent as Grid; string defaultPath = g.Tag as string; Bitmap bitmap = new Bitmap(defaultPath); g.Background = new System.Windows.Media.ImageBrush(BitmapToBitmapSource(bitmap)); } private void MenuMouseEnter(object sender, MouseEventArgs e) { Ellipse ell = sender as Ellipse; Grid g = ell.Parent as Grid; string defaultPath = g.Tag as string; string blueBg = defaultPath.Replace(".png","-blue.png"); Bitmap bitmap = new Bitmap(blueBg); g.Background = new System.Windows.Media.ImageBrush(BitmapToBitmapSource(bitmap)); } private void Grid_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) { Grid gd = sender as Grid; gd.Opacity = .5; } private void Grid_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { Grid gd = sender as Grid; gd.Opacity = 1; } public static IEnumerable FindVisualChildren(DependencyObject depObj) where T : DependencyObject { if (depObj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { DependencyObject child = VisualTreeHelper.GetChild(depObj, i); if (child != null && child is T t) { yield return t; } foreach (T childOfChild in FindVisualChildren(child)) { yield return childOfChild; } } } } private void InfoScrollViewer_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) { InfoScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; } private void InfoScrollViewer_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) { InfoScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; } private void ImageHome_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { this.m_IResposeWPF.ResposeWPF("VIEWENTIRE"); } protected override void OnKeyUp(KeyEventArgs e) { base.OnKeyUp(e); if (e.Key == Key.Escape) this.Hide(); } private void ImageExist_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e) { this.Hide(); } //public DockPanel StackPanel01 //{ // get { return this.m_PanelLeftCahrt01; } //} public Grid StackPanel02 { get { return this.m_PanelLeftCahrt02; } } public Grid StackPanel03 { get { return this.m_PanelLeftCahrt03; } } public Grid StackPanel04 { get { return this.m_PanelLeftCahrt04; } } [DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); //将 Bitmap转换为BitmapSource //使用过System.Drawing.Bitmap后一定要用DeleteObject释放掉对象,不然内存不释放,很快系统内存就消耗光了。 private static ImageSource BitmapToBitmapSource(Bitmap bitmap) { IntPtr hBitmap = bitmap.GetHbitmap(); ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。 { throw new System.ComponentModel.Win32Exception(); } return wpfBitmap; } } }