WPF窗体实现靠近窗体边缘自动贴边展示效果代码实现
WPF窗体贴边自动收起自动贴边
编程开发
97
前些天原本突发奇想的想做一个桌面助手的工具,用于管理日常用来远程向日葵,todesk等远程软件的账号信息的桌面管理软件,其中想实现类似与qq的自动贴边收起的效果,琢磨了好久终于实现出来类似效果了 代码非常简单
核心逻辑比较简单, 就是创建一个timer 定时检测窗体当前的位置坐标,当top的绝对值小于30时 自动修改成0(也可以使用动画) 后续紧接着在判断如果鼠标未处于窗体内 就使用动画效果,将窗体一直往顶部移动 直到看不见,动画结束事件里再隐藏窗体就实现了该效果
在 WPF 中实现窗体靠近边缘自动贴边展示效果,可以通过监测窗体的位置和大小,以及监测鼠标的位置来实现。以下是一个简单的实现方案,代码示例:
public partial class MainWindow : Window
{
private const int THICKNESS = 10; // 贴边触发距离
public MainWindow()
{
InitializeComponent();
this.Left = SystemParameters.WorkArea.Width - this.Width; // 初始化窗体位置,贴到右侧边缘
this.Top = SystemParameters.WorkArea.Height - this.Height;
this.MouseMove += MainWindow_MouseMove; // 监测鼠标位置
this.SizeChanged += MainWindow_SizeChanged; // 监测窗体大小
}
private void MainWindow_MouseMove(object sender, MouseEventArgs e)
{
var pos = e.GetPosition(this); // 获取鼠标位置
if (pos.X <= THICKNESS) // 靠近左侧边缘
{
this.Left = 0;
}
else if (pos.X >= this.Width - THICKNESS) // 靠近右侧边缘
{
this.Left = SystemParameters.WorkArea.Width - this.Width;
}
if (pos.Y <= THICKNESS) // 靠近顶部边缘
{
this.Top = 0;
}
else if (pos.Y >= this.Height - THICKNESS) // 靠近底部边缘
{
this.Top = SystemParameters.WorkArea.Height - this.Height;
}
}
private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (this.Left + this.Width >= SystemParameters.WorkArea.Width) // 窗体大小改变时,保持贴边效果
{
this.Left = SystemParameters.WorkArea.Width - this.Width;
}
if (this.Top + this.Height >= SystemParameters.WorkArea.Height)
{
this.Top = SystemParameters.WorkArea.Height - this.Height;
}
}
}
在这个示例代码中,我们在窗体的构造函数中初始化窗体位置,将其贴到右侧边缘。然后,我们为窗体的 MouseMove 和 SizeChanged 事件添加了事件处理程序,以便监测鼠标和窗体的位置和大小。在鼠标移动时,我们检查鼠标的位置是否靠近边缘,如果靠近则将窗体移动到相应的位置。在窗体大小改变时,我们检查窗体的位置和大小是否仍然贴边,如果不是,则将窗体移动回到边缘。
通过这种方式,我们可以实现一个简单的 WPF 窗体自动贴边效果。当然,如果需要实现更加复杂的功能,还有许多优化和改进的空间,比如可以实现窗体的拖动和缩放等功能。