当前位置: 代码网 > it编程>编程语言>Asp.net > C# WPF自制白板工具

C# WPF自制白板工具

2024年11月12日 Asp.net 我要评论
随着电子屏幕技术的发展,普通的黑板已不再适用现在的教学和演示环境,电子白板应运而生。本篇使用wpf开发了一个电子白板工具,功能丰富,非常使用日常免费使用,或者进行再次开发。示例代码如下:

随着电子屏幕技术的发展,普通的黑板已不再适用现在的教学和演示环境,电子白板应运而生。本篇使用wpf开发了一个电子白板工具,功能丰富,非常使用日常免费使用,或者进行再次开发。

示例代码如下:

        stack<strokecollection> undostack = new stack<strokecollection>();//撤销
        stack<strokecollection> recoverstack = new stack<strokecollection>();//恢复撤销
 
        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;
 
            //设置色板和清空橡皮位置
            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)
        {
            //橡皮模式下选择其他工具关闭橡皮擦功能
            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() == "恢复")
            {
                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

到此这篇关于c# wpf自制白板工具的文章就介绍到这了,更多相关wpf白板内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com