基本信息
源码名称:wpf绘图程序 源码下载(绘图工具)
源码大小:0.36M
文件格式:.rar
开发语言:C#
更新时间:2016-06-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
【实例介绍】
绘图程序
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Xml; namespace MetroStopStation { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { AdornerLayer drawCanvasAdornerLayer; ResizeMoveAdorner resizeMoveAdorner = null; Point? mouseLeftButtonDownPoint = null; Label tmepLine = null; UIElement selectedUIElement = null; ToggleButton tempToggleButton = null; public MainWindow() { InitializeComponent(); } /// <summary> /// 选择工具箱的工具时,去掉选择工具的使用 /// 选择工具带有修改元素装饰器,一起清除 /// </summary> private void ClearSelectTool() { elementSelectTool.IsChecked = false; ClearResizeMoveAdorner(); resizeMoveAdorner = null; } private void DrawCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { mouseLeftButtonDownPoint = e.GetPosition(drawCanvas); if (null != elementSelectTool.IsChecked && elementSelectTool.IsChecked == true) { Point moseDownPoint = (Point)mouseLeftButtonDownPoint; ModifyElement(moseDownPoint); } } private void DrawCanvas_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { Point nowMovingPoint = e.GetPosition(drawCanvas); if (toolBox.SelectedItem != null && mouseLeftButtonDownPoint != null) { ListBoxItem selectedTool = toolBox.SelectedItem as ListBoxItem; if (selectedTool.Name == "straightConnectLine") { string styleName = GetToolStyleName(selectedTool.Name, nowMovingPoint); DrawTrackLabel(nowMovingPoint, styleName); } else if (selectedTool.Name == "LConnectLine") { string styleName = GetToolStyleName(selectedTool.Name, nowMovingPoint); DrawTrackLabel(nowMovingPoint, styleName); } else if (selectedTool.Name == "switchToolItem") { DrawToggleButton(nowMovingPoint, "SwitchToggleButtonStyle"); } else if (selectedTool.Name == "groundSwitchToolItem") { DrawToggleButton(nowMovingPoint, "GroundSwitchToggleButtonStyle"); } else if (selectedTool.Name == "platDoorToolItem") { DrawToggleButton(nowMovingPoint, "PlatDoorToggleButtonStyle"); } else if (selectedTool.Name == "electricConfirmToolItem") { DrawToggleButton(nowMovingPoint, "ElectricConfirmToggleButtonStyle"); } else if (selectedTool.Name == "trackLineToolItem") { DrawTrackLabel(nowMovingPoint, "TrackLineLabelStyle"); } else if (selectedTool.Name == "electricBreakToolItem") { DrawTrackLabel(nowMovingPoint, "LineBreakLabelStyle"); } else if (selectedTool.Name == "trackNameToolItem") { DrawTrackLabel(nowMovingPoint, "TrackIDLabelStyle"); } } } } private void DrawCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { Point mouseUpPoint = e.GetPosition(drawCanvas); if (toolBox.SelectedItem != null) { ListBoxItem selectedTool = toolBox.SelectedItem as ListBoxItem; string styleName = GetToolStyleName(selectedTool.Name, mouseUpPoint); if (tempToggleButton != null && (selectedTool.Name == "switchToolItem" || selectedTool.Name == "groundSwitchToolItem" || selectedTool.Name == "platDoorToolItem" || selectedTool.Name == "electricConfirmToolItem")) { SaveToggleButton(styleName); } else if (tmepLine != null && (selectedTool.Name == "LConnectLine" || selectedTool.Name == "straightConnectLine" || selectedTool.Name == "trackLineToolItem" || selectedTool.Name == "electricBreakToolItem" || selectedTool.Name == "trackNameToolItem")) { SaveTrackLabel(styleName); } } mouseLeftButtonDownPoint = null; } private void DrawTrackLabel(Point nowMovingPoint, string styleName) { if (null != tmepLine) { drawCanvas.Children.Remove(tmepLine); } Point positionPoint = (Point)mouseLeftButtonDownPoint; double xOffset = nowMovingPoint.X - positionPoint.X; double yOffset = nowMovingPoint.Y - positionPoint.Y; StringBuilder xamlUIElementBuilder = new StringBuilder(); xamlUIElementBuilder.Append("<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' "); xamlUIElementBuilder.Append("Style='{ DynamicResource " styleName "}' "); xamlUIElementBuilder.Append("Background='Transparent' BorderThickness='0' IsHitTestVisible='false' "); xamlUIElementBuilder.Append("Width='" Math.Abs(xOffset) "' "); xamlUIElementBuilder.Append("Height='" Math.Abs(yOffset) "'/>"); tmepLine = XamlReader.Parse(xamlUIElementBuilder.ToString()) as Label; drawCanvas.Children.Add(tmepLine); SetElementInCanvas(tmepLine, xOffset, yOffset, positionPoint, nowMovingPoint); } private void DrawToggleButton(Point nowMovingPoint, string styleName) { if (tempToggleButton != null) { drawCanvas.Children.Remove(tempToggleButton); } Point positionPoint = (Point)mouseLeftButtonDownPoint; double xOffset = nowMovingPoint.X - positionPoint.X; double yOffset = nowMovingPoint.Y - positionPoint.Y; StringBuilder xamlUIElementBuilder = new StringBuilder(); xamlUIElementBuilder.Append("<ToggleButton xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' "); xamlUIElementBuilder.Append("Style='{ DynamicResource " styleName "}' "); xamlUIElementBuilder.Append("Background='Transparent' BorderThickness='0' IsHitTestVisible='false' "); xamlUIElementBuilder.Append("Width='" Math.Abs(xOffset) "' "); xamlUIElementBuilder.Append("Height='" Math.Abs(yOffset) "'/>"); tempToggleButton = XamlReader.Parse(xamlUIElementBuilder.ToString()) as ToggleButton; drawCanvas.Children.Add(tempToggleButton); SetElementInCanvas(tempToggleButton, xOffset, yOffset, positionPoint, nowMovingPoint); } private void SetElementInCanvas(UIElement tempToggleButton, double xOffset, double yOffset, Point positionPoint, Point nowMovingPoint) { if (xOffset >= 0 && yOffset >= 0) { Canvas.SetLeft(tempToggleButton, positionPoint.X); Canvas.SetTop(tempToggleButton, positionPoint.Y); } else if (xOffset >= 0 && yOffset <= 0) { Canvas.SetLeft(tempToggleButton, positionPoint.X); Canvas.SetTop(tempToggleButton, nowMovingPoint.Y); } else if (xOffset <= 0 && yOffset >= 0) { Canvas.SetLeft(tempToggleButton, nowMovingPoint.X); Canvas.SetTop(tempToggleButton, positionPoint.Y); } else if (xOffset <= 0 && yOffset <= 0) { Canvas.SetLeft(tempToggleButton, nowMovingPoint.X); Canvas.SetTop(tempToggleButton, nowMovingPoint.Y); } } private string GetStraightConnectionLineStyleName(Point nowMovingPoint) { Point positionPoint = (Point)mouseLeftButtonDownPoint; double xOffset = nowMovingPoint.X - positionPoint.X; double yOffset = nowMovingPoint.Y - positionPoint.Y; string styleName = string.Empty; if (xOffset >= 0 && yOffset >= 0) { styleName = "BottomRightLineLabelStyle"; } else if (xOffset >= 0 && yOffset <= 0) { styleName = "TopRightLineLabelStyle"; } else if (xOffset <= 0 && yOffset >= 0) { styleName = "TopRightLineLabelStyle"; } else if (xOffset <= 0 && yOffset <= 0) { styleName = "BottomRightLineLabelStyle"; } return styleName; } private string GetLConnectionLineStyleName(Point nowMovingPoint) { Point positionPoint = (Point)mouseLeftButtonDownPoint; double xOffset = nowMovingPoint.X - positionPoint.X; double yOffset = nowMovingPoint.Y - positionPoint.Y; string styleName = string.Empty; if (xOffset >= 0 && yOffset >= 0) { styleName = "TRLConnectionLineLabelStyle"; } else if (xOffset >= 0 && yOffset <= 0) { styleName = "BRLConnectionLineLabelStyle"; } else if (xOffset <= 0 && yOffset >= 0) { styleName = "TLLConnectionLineLabelStyle"; } else if (xOffset <= 0 && yOffset <= 0) { styleName = "BLLConnectionLineLabelStyle"; } return styleName; } private void DrawLConnectionLine(Point nowMovingPoint) { //if (tempLConnectionLine != null) //{ // drawCanvas.Children.Remove(tempLConnectionLine); //} //tempLConnectionLine = new LConnectionLine(); //tempLConnectionLine.IsHitTestVisible = false; //tempLConnectionLine.StartPoint = (Point)mouseLeftButtonDownPoint; //tempLConnectionLine.EndPoint = nowMovingPoint; //drawCanvas.Children.Add(tempLConnectionLine); } /// <summary> /// 修改页面元素大小,位置 /// </summary> /// <param name="point">拖拽点</param> private void ModifyElement(Point point) { bool IsSelectedUIElement = false; foreach (UIElement item in drawCanvas.Children) { var startPoint = new Point(Canvas.GetLeft(item), Canvas.GetTop(item)); if (point.X >= Canvas.GetLeft(item) && point.X <= Canvas.GetLeft(item) item.RenderSize.Width && point.Y >= Canvas.GetTop(item) && point.Y <= Canvas.GetTop(item) item.RenderSize.Height) { IsSelectedUIElement = true; ClearResizeMoveAdorner(); resizeMoveAdorner = new ResizeMoveAdorner(item); selectedUIElement = item; drawCanvasAdornerLayer.Add(resizeMoveAdorner); break; } } if (!IsSelectedUIElement) { ClearResizeMoveAdorner(); } } /// <summary> /// 当前画板清除修改元素装饰器 /// </summary> private void ClearResizeMoveAdorner() { if (null != resizeMoveAdorner) { selectedUIElement = null; drawCanvasAdornerLayer.Remove(resizeMoveAdorner); } } private void SaveTrackLabel(string styleName) { var positionPoint = (Point)mouseLeftButtonDownPoint; StringBuilder xamlUIElementBuilder = new StringBuilder(); xamlUIElementBuilder.Append("<Label xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' "); xamlUIElementBuilder.Append("Style='{ DynamicResource " styleName "}' "); xamlUIElementBuilder.Append("Background='Transparent' BorderThickness='0' IsHitTestVisible='false' "); xamlUIElementBuilder.Append("Width='" tmepLine.Width "' "); xamlUIElementBuilder.Append("Height='" tmepLine.Height "'/>"); Label finalLabel = XamlReader.Parse(xamlUIElementBuilder.ToString()) as Label; //Label finalLabel = new Label(); //finalLabel.Style = tmepLine.Style; //finalLabel.Width = tmepLine.Width; //finalLabel.Height = tmepLine.Height; //finalLabel.IsHitTestVisible = false; drawCanvas.Children.Add(finalLabel); Canvas.SetLeft(finalLabel, Canvas.GetLeft(tmepLine)); Canvas.SetTop(finalLabel, Canvas.GetTop(tmepLine)); drawCanvas.Children.Remove(tmepLine); tmepLine = null; } private void SaveToggleButton(string styleName) { var positionPoint = (Point)mouseLeftButtonDownPoint; StringBuilder xamlUIElementBuilder = new StringBuilder(); xamlUIElementBuilder.Append("<ToggleButton xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' "); xamlUIElementBuilder.Append("Style='{ DynamicResource " styleName "}' "); xamlUIElementBuilder.Append("Background='Transparent' BorderThickness='0' IsHitTestVisible='false' "); xamlUIElementBuilder.Append("Width='" tempToggleButton.Width "' "); xamlUIElementBuilder.Append("Height='" tempToggleButton.Height "'/>"); ToggleButton finalToggleButton = XamlReader.Parse(xamlUIElementBuilder.ToString()) as ToggleButton; drawCanvas.Children.Add(finalToggleButton); Canvas.SetLeft(finalToggleButton, Canvas.GetLeft(tempToggleButton)); Canvas.SetTop(finalToggleButton, Canvas.GetTop(tempToggleButton)); drawCanvas.Children.Remove(tempToggleButton); tempToggleButton = null; } private void Window_Loaded(object sender, RoutedEventArgs e) { drawCanvasAdornerLayer = AdornerLayer.GetAdornerLayer(drawCanvas); foreach (UIElement item in drawCanvas.Children) { item.IsHitTestVisible = false; } } #region 页面缩放 private void ZoomBig_Click(object sender, RoutedEventArgs e) { drawCanvas.Scale = 0.2; } private void ZoomIn_Clicked(object sender, RoutedEventArgs e) { drawCanvas.Scale -= 0.2; } private void ZoomBack_Clicked(object sender, RoutedEventArgs e) { drawCanvas.Scale = 1; } #endregion /// <summary> /// 用户选择选择工具 /// 1.清理工具箱选择的工具 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ElementSelectTool_Checked(object sender, RoutedEventArgs e) { toolBox.SelectedItem = null; elementSelectTool.IsChecked = true; } /// <summary> /// 用户选择工具箱工具 /// 1.清理选择,移动工具 /// </summary> private void ToolBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ClearSelectTool(); } private void GraphicExportButton_Click(object sender, RoutedEventArgs e) { using (FileStream fs = new FileStream(@"F:\PicData.dat", FileMode.Create)) { //当需要保存当前图形时,调用XamlWriter的以下方法将Canvas对象直接序列化到文件流中 XamlWriter.Save(drawCanvas, fs); MessageBox.Show("数据已保存"); } } private void GraphicImportButton_Clicked(object sender, RoutedEventArgs e) { string filePath = string.Empty; ImportGraphicFile importGraphicFile = new ImportGraphicFile(); if (importGraphicFile.ShowDialog() == true) { filePath = importGraphicFile.ImportFilePath; } if (!string.IsNullOrEmpty(filePath)) { using (FileStream fs = new FileStream(filePath, FileMode.Open)) { //double oldWidth = DrawPanelBorder.ActualWidth; //double oldHeight = DrawPanelBorder.ActualHeight; //调用XamlReader的方法从文件流中重建canvas对象 drawCanvasParent.Content = null; drawCanvas = XamlReader.Load(fs) as ZoomableCanvas; //CurCanvas.Width = oldWidth; //CurCanvas.Height = oldHeight; drawCanvasParent.Content = drawCanvas; } } } private void DrawCanvas_KeyUp(object sender, KeyEventArgs e) { } private void Window_KeyUp(object sender, KeyEventArgs e) { if (e.Key == Key.Delete && null != selectedUIElement) { drawCanvas.Children.Remove(selectedUIElement); } } private string GetToolStyleName(string toolName, Point nowMovingPoint) { string styleName = string.Empty; if (toolName == "straightConnectLine") { styleName = GetStraightConnectionLineStyleName(nowMovingPoint); } else if (toolName == "LConnectLine") { styleName = GetLConnectionLineStyleName(nowMovingPoint); } else if (toolName == "switchToolItem") { styleName = "SwitchToggleButtonStyle"; } else if (toolName == "groundSwitchToolItem") { styleName = "GroundSwitchToggleButtonStyle"; } else if (toolName == "platDoorToolItem") { styleName = "PlatDoorToggleButtonStyle"; } else if (toolName == "electricConfirmToolItem") { styleName = "ElectricConfirmToggleButtonStyle"; } else if (toolName == "trackLineToolItem") { styleName = "TrackLineLabelStyle"; } else if (toolName == "electricBreakToolItem") { styleName = "LineBreakLabelStyle"; } else if (toolName == "trackNameToolItem") { styleName = "TrackIDLabelStyle"; } return styleName; } } }