WPF实现程序窗体自定义拖拽

编程开发
241
WPF
自定义标题栏
自定义拖拽

WPF如何实现自定义拖拽

WPF类似于WEB页面布局的优点是winForm无法具备的,通过它灵活的布局,样式的添加,可以制作出很炫的界面 ;

WPF怎么美化?WPF默认的窗口标题栏对于一些设计来说十分不合时宜,所以一般都会去掉替换上自有的设计,去掉标题栏的方法很多也分简单。不过,这样一来又会有另外一个问题,即去掉了标题栏后,没有了原有的拖拽和按住缩放大小的功能。 然而这两个功能大多数时候都是刚需,所以只能使用其他方式为自己替换的标题栏添加上这两个功能。

首先给模拟的标题栏添加 鼠标移动 和 鼠标点击 这两个事件

MouseMove="ResizePressed"  
MouseDown="ResizePressed"

后台添加以下代码

#region 初始化窗体可以缩放大小  
  
private const int WM_SYSCOMMAND = 0x112;  
private HwndSource _HwndSource;  
private Dictionary cursors = new Dictionary  
{  
	{ ResizeDirection.BottomRight, Cursors.SizeNWSE },  
};  
private enum ResizeDirection  
{  
	BottomRight = 8,  
}  
[DllImport( "user32.dll", CharSet = CharSet.Auto )]  
private static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );  
  
private void ResizePressed( object sender, MouseEventArgs e )  
{  
	FrameworkElement element = sender as FrameworkElement;  
	ResizeDirection	 direction = (ResizeDirection) Enum.Parse(typeof(ResizeDirection), element.Name.Replace( "Resize", "" ));  
	ResizeBottomRight.Cursor = cursors[direction];  
	if (e.LeftButton == MouseButtonState.Pressed)  
		ResizeWindow(direction);  
}  
  
  
private void ResizeWindow( ResizeDirection direction )  
{  
	SendMessage( _HwndSource.Handle, WM_SYSCOMMAND, (IntPtr) (61440 + direction), IntPtr.Zero );  
}  
  
#endregion
WPF实现窗体接收鼠标拖拽的文件例子
一次使用AutoResetEvent的经历:在Task并发环境下导致UI线程卡死 内存一直上涨
WPF桌面程序开发怎么实现鼠标窗体穿透点击桌面
在.NET CORE\.NET 5 下WPF如何实现托盘图标功能
WPF中某一个控件绑定其他指定UI控件的属性值
.NET 5 WPF 如何开启控制台界面用于实时输出日志
.NET程序系统托盘运行出现多个同样的托盘图标的解决方法
Windows桌面开发优秀的WPF界面开源UI组件 MahApps.Metro
WPF 设置程序不允许同一类程序多开进程
WPF引用CommunityToolkit.Mvvm实现属性变动双向绑定的简单例子
WPF使用popup控件实现弹出式提示
WPF文本框控件RichTextBox实现MVVM绑定数据源
暂无相关内容...
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
wpf实现大屏幕弹幕播放效果特效源码新手可参考下.rar
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删