哪位大侠可以把这段WPF的代码改成C#的。

问题描述

下面的是我从其它地方找到的WPF代码,可是自己不会WPF,还忘高人改成c#使用户能改变控件的位置,早已不是稀奇的事儿了。最近在WPF下实现了这一功能,并且尝试使用VisualBrush实现了拖动时的阴影效果。首先实例化一个Canvas布局:<Canvasx:Name="c"MouseDown="c_MouseDown"MouseMove="c_MouseMove"MouseUp="c_MouseUp"></Canvas>接着就是代码部分:注释在代码里面了publicpartialclassWindow1:Window{privatebooldragging;PointmousePoint;Rectangleshadow=newRectangle();//显示控件阴影的矩形ControlmouseCtrl=null;//被拖动的控件publicWindow1(){InitializeComponent();FullScreenManager.RepairWpfWindowFullScreenBehavior(this);dragging=false;shadow.Opacity=0.5;//阴影加点透明度c.Children.Add(shadow);//阴影加入canvasshadow.Visibility=Visibility.Hidden;//隐藏shadow}privatevoidc_MouseDown(objectsender,MouseButtonEventArgse){if(e.LeftButton==MouseButtonState.Pressed){dragging=true;//标记鼠标按下mousePoint=e.GetPosition(this.c);//获取鼠标在但前canvas内的位置mouseCtrl=(Control)e.Source;//获得事件触发的源,即哪个控件VisualBrushv;v=newVisualBrush(mouseCtrl);//利用VisualBrush得到控件的影像shadow.Width=mouseCtrl.Width;shadow.Height=mouseCtrl.Height;shadow.Fill=v;//将影像填充给矩形Canvas.SetLeft(shadow,Canvas.GetLeft(mouseCtrl));Canvas.SetTop(shadow,Canvas.GetTop(mouseCtrl));shadow.Visibility=Visibility.Visible;//使矩形可见//Canvas.SetZIndex(shadow,0);//可以通过SetZIndex设置阴影的z方向位置c.CaptureMouse();//强制捕获鼠标。这在对于背景透明的窗体里面是必须的}}privatevoidc_MouseMove(objectsender,MouseEventArgse){if(dragging){if(e.LeftButton==MouseButtonState.Pressed){PointtheMousePoint=e.GetPosition(this.c);Canvas.SetLeft(shadow,theMousePoint.X-(mousePoint.X-Canvas.GetLeft(shadow)));Canvas.SetTop(shadow,theMousePoint.Y-(mousePoint.Y-Canvas.GetTop(shadow)));//简单的计算,只移动shadowmousePoint=theMousePoint;}}}privatevoidc_MouseUp(objectsender,MouseButtonEventArgse){dragging=false;Mouse.Capture(null);//取消强制捕获shadow.Visibility=Visibility.Hidden;//隐藏shadowCanvas.SetLeft(mouseCtrl,Canvas.GetLeft(shadow));Canvas.SetTop(mouseCtrl,Canvas.GetTop(shadow));//将控件放到新的位置}}这里需要说明的是c.CaptureMouse();首先谈一下我的体会,刚开始没有写这句话,原因是在正常的窗体里面测试的。后来因为需要,将窗体背景设成透明后,发现shadow总是“跟不上”,仔细观察后发现,原因是当鼠标在透明的区域上划过的时候不会响应mousemove事件。所以如果窗体背景不是透明的话,写不写这句话都是一样的。后来在别人的提示下,强制捕获鼠标就解决了这个问题。并且尽管理论上这段代码具有通用性,也就是任何control下的元素都可以实现拖动。但是对于本身具有click或mousedown事件的元素,例如button,这段代码就不适用了。原因是mousedown事件在遇到这样的元素的时候还没来得及路由给canvas就被捕获了。在这个实例中还有一点,如果我们在代码里把一个控件实例化,并加到canvas里面后一定要手动设置它在canvas的位置Canvas.SetLeft(t,0);Canvas.SetTop(t,0);否则控件的位置是个“非数”。本文来自LesterDuo的博客,原文地

解决方案

解决方案二:
呵呵,你的想法很好如果不借用其他一些现成的类库是很难实现的。因为,在上面代码中出现的很多功能都,都是微软已经封住完毕的。上边的每一行代码,如果用其他的语言(结构框架)去实现,都可以能用几十行或上百行。
解决方案三:
这难道不是c#么?
解决方案四:
改成C#WINFORM的。

时间: 2024-09-10 17:41:36

哪位大侠可以把这段WPF的代码改成C#的。的相关文章

fortran-一段matlab的代码翻译成java的

问题描述 一段matlab的代码翻译成java的 def find_all_paths(graph, start, end, path=): path = path + if start == end: return if not graph.has_key(start): return paths = for node in graph: if node not in path: newpaths = find_all_paths(graph, node, end, path) for new

这段c语言代码换成java是什么呢?求教啊!?

问题描述 这段c语言代码换成java是什么呢?求教啊!? ?????????????????????????????????????????????????????????????????? 解决方案 package javaOJ; import java.util.Scanner; public class c { public static void main(String[] args) { String s; //char[] s = new char[1000]; Scanner sc

php pdf 上传-代码改成pdf上传路径成功,但内容无法上传,哪位大神帮忙改改

问题描述 代码改成pdf上传路径成功,但内容无法上传,哪位大神帮忙改改 文档管理 <body style="text-align:center;"> <div data-role="page" id="pageone"> <div data-role="content"> <div data-role="navbar"> <ul> <li&g

这段c语言代码换成java是什么呢?求教啊

问题描述 这段c语言代码换成java是什么呢?求教啊 #include #include int main(){ char str[10000]; int i,len; while(gets(str)) { if(!strcmp(str,"#")) break; len = strlen(str); for(i = 0;i<len;i++) { if(str[i] == ' ') printf("%%20"); else if(str[i] == '!') p

哪位大哥可以将这段J2ME天气预报的代码改成JAVAME能用代码这是代码代码的第一部分,由于太长只好分成两段???向你学习学习

问题描述 packagegoogleweather;importjava.io.ByteArrayOutputStream;importjava.io.DataInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjavax.microedition.io.Connector;importjavax.microedition.io.HttpConn

求牛人帮我把这段代码改成C#的,谢谢

问题描述 #ifndefUSB_RELAY_DEVICE_H__#defineUSB_RELAY_DEVICE_H__#pragmacomment(lib,"setupapi.lib")#ifdef__cplusplusextern"C"{#endif//#pragmacomment(lib,"setupapi.lib")#ifdef_WIN32#defineEXPORT_API__declspec(dllexport)#else#defineE

将一段vba宏代码翻译成java/javascript脚本。急。。。

问题描述 vba代码如下,是创建批注的一个宏,想在js里面做同样的事情,请问js或者java代码该怎么样写谢谢SubMacro1()''Macro1Macro'宏在2011-9-22由?????录制'Selection.Comments.AddRange:=Selection.RangeSelection.TypeTextText:="批注错误类型"EndSub在页面中有用到weboffice的插件,调用宏知道怎么写,就是不知道怎么创建宏求指点······

想把这段代码改成c# 集成环境asp.net 2.0

问题描述 Dimrs,stronerrorresumenextCallDBConnBegin()str="selectclerk_id,namefromclerkwhereLeibie<>1andLOWER(clerk_name)<>'guest'Orderbyclerk_id"setrs=Conn.execute(str)ifrequest("ok")="确认"thenstr="insertintoforum_

求救:请问如何把这段代码改为泛型

问题描述 .将下面的代码改成泛型:PublicclassSimple(intvalue){this._Value=value;}PrivateintSimple;PublicintSimple;{Return_Value;}小弟就要面试,各位老大给点帮助吧,小弟感激不尽!2 解决方案 解决方案二:没看懂你这段代码解决方案三:看不懂,不知道是什么意思!猜了下哈,LZ是不是要这样:publicclassSimple<T>{publicSimple(Tvalue){_value=value;}pri