C# WPF自制白板工具
隨著電子屏幕技術(shù)的發(fā)展,普通的黑板已不再適用現(xiàn)在的教學(xué)和演示環(huán)境,電子白板應(yīng)運而生。本篇使用WPF開發(fā)了一個電子白板工具,功能豐富,非常使用日常免費使用,或者進(jìn)行再次開發(fā)。
示例代碼如下:
Stack<StrokeCollection> undoStack = new Stack<StrokeCollection>();//撤銷 Stack<StrokeCollection> recoverStack = new Stack<StrokeCollection>();//恢復(fù)撤銷 public MainWindow() { InitializeComponent(); this.DataContext = Global.Instance.WhiteBoardPageModel; try { EraserCanvas.MouseDown += EraserCanvas_MouseDown; EraserCanvas.MouseMove += EraserCanvas_MouseMove; EraserCanvas.MouseUp += EraserCanvas_MouseUp; Global.Instance.InkCanvasList[ Global.Instance.WhiteBoardPageModel.PageIndex-1].PreviewMouseDown += WriteBorad_PreviewMouseDown; InkCanvasRootPanel.Children.Clear(); InkCanvasRootPanel.Children.Add(Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1]); } catch (Exception) { } } private void Window_Loaded(object sender, RoutedEventArgs e) { //top = this.Top; //left = this.Left; //width = this.Width; //heigh = this.Height; //啟動最大化白板 this.Top = this.Left = 0; this.Width = SystemParameters.WorkArea.Width; this.Height = SystemParameters.WorkArea.Height; //設(shè)置色板和清空橡皮位置 Window window = Window.GetWindow(rdoPen); Point point = rdoPen.TransformToAncestor(window).Transform(new Point(0, 0)); translateColor.X = translateColor.X - 100; translateEraser.X = translateEraser.X-30; if (rdoPenWidthMin.Content.ToString() == Global.Instance.ColorHelper.selectedPenWidth.Trim()) rdoPenWidthMin.IsChecked = true; else if (rdoPenWidthMedium.Content.ToString() == Global.Instance.ColorHelper.selectedPenWidth.Trim()) rdoPenWidthMedium.IsChecked = true; else if (rdoPenWidthMax.Content.ToString() == Global.Instance.ColorHelper.selectedPenWidth.Trim()) rdoPenWidthMax.IsChecked = true; //初始化色板 foreach (string color in Global.Instance.ColorHelper.colorList) { RadioButton btntemp = new RadioButton(); btntemp.SetResourceReference(StyleProperty, "ColorSelectStyle"); btntemp.Width = 30; btntemp.Height = 30; btntemp.Margin = new Thickness(2, 2, 2, 0); btntemp.Background = new SolidColorBrush((System.Windows.Media.Color)ColorConverter.ConvertFromString(color)); if (btntemp.Background.ToString() == Global.Instance.ColorHelper.selectedColor) { btntemp.IsChecked = true; Global.Instance.InkCanvasList[ Global.Instance.WhiteBoardPageModel.PageIndex-1].DefaultDrawingAttributes.Color =(System.Windows.Media.Color)ColorConverter.ConvertFromString((string)Global.Instance.ColorHelper.selectedColor); } uniformColor.Children.Add(btntemp); } } #region InkCanvas操作 bool transformColorFlag = false; bool transformEraserClearFlag = false; private void RadioButton_Click(object sender, RoutedEventArgs e) { //橡皮模式下選擇其他工具關(guān)閉橡皮擦功能 EraserCanvas.Visibility = Visibility.Collapsed; _eraserisDown = false; //如果色板打開下選擇其他工具,隱藏色板工具 if (!(bool)rdoPen.IsChecked) { transformColorFlag = false; translateColor.Y = 300; } if (!(bool)rdoEraser.IsChecked) { transformEraserClearFlag = false; translateEraser.Y = 100; } if ((sender as RadioButton).Content.ToString() == "畫筆") { if (transformColorFlag) { translateColor.Y = -10; } else { translateColor.Y = 300; } transformColorFlag = !transformColorFlag; Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].EditingMode = InkCanvasEditingMode.Ink; } else if ((sender as RadioButton).Content.ToString() == "橡皮") { if (transformEraserClearFlag) { translateEraser.Y = -10; } else { translateEraser.Y = 100; } transformEraserClearFlag = !transformEraserClearFlag; Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].EditingMode = InkCanvasEditingMode.None; EraserCanvas.Visibility = Visibility.Visible; TranslateTransform.X = -1000; TranslateTransform.Y = -1000; //Global.Instance.InkCanvasList[ Global.Instance.WhiteBoardPageModel.PageIndex-1].EditingMode = InkCanvasEditingMode.EraseByPoint; //Global.Instance.InkCanvasList[ Global.Instance.WhiteBoardPageModel.PageIndex-1].EditingMode = InkCanvasEditingMode.EraseByStroke; } else if ((sender as RadioButton).Content.ToString() == "選擇") { //PenFullScreen(); Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].EditingMode = InkCanvasEditingMode.None; //Global.Instance.InkCanvasList[ Global.Instance.WhiteBoardPageModel.PageIndex-1].EditingMode = InkCanvasEditingMode.Select; } else if ((sender as RadioButton).Content.ToString() == "撤銷") { if (undoStack.Count > 0) { recoverStack.Push(Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].Strokes.Clone()); Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].Strokes = undoStack.Pop(); } } else if ((sender as RadioButton).Content.ToString() == "恢復(fù)") { if (recoverStack.Count > 0) { undoStack.Push(Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].Strokes.Clone()); Global.Instance.InkCanvasList[Global.Instance.WhiteBoardPageModel.PageIndex - 1].Strokes = recoverStack.Pop(); } } } #endregion
到此這篇關(guān)于C# WPF自制白板工具的文章就介紹到這了,更多相關(guān)WPF白板內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
WinForm實現(xiàn)讀取Resource中文件的方法
這篇文章主要介紹了WinForm實現(xiàn)讀取Resource中文件的方法,很實用的一個功能,需要的朋友可以參考下2014-08-08C#實現(xiàn)Socket服務(wù)器及多客戶端連接的方式
這篇文章介紹了C#實現(xiàn)Socket服務(wù)器及多客戶端連接的方式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01C#創(chuàng)建安全的字典(Dictionary)存儲結(jié)構(gòu)
本文主要對存儲結(jié)構(gòu)字典(Dictionary)的一些常用方法進(jìn)行簡單的說明,并闡述了如何創(chuàng)建安全的字典(Dictionary)存儲結(jié)構(gòu)。希望對大家有所幫助2016-12-12C#通過System.CommandLine快速生成支持命令行的應(yīng)用程序
這篇文章介紹了C#通過System.CommandLine快速生成支持命令行應(yīng)用程序的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07