随着电子屏幕技术的发展,普通的黑板已不再适用现在的教学和演示环境,电子白板应运而生。本篇使用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白板内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论