WPF:拖动父窗口行为
原文 WPF:拖动父窗口行为
这次只是一个快速的帖子:当我点击并拖动特定的UIElement时,我需要能够重新定位WPF窗口。目的是重新创建在标准Windows标题栏上单击和拖动的行为(在我的情况下,我正在实现我自己的标题栏)。
事实证明这很容易实现,因此我将功能包装在一个简单的WPF行为中。您可以简单地将此行为附加到任何屏幕上的元素,它将自动找到父窗口,并将所有内容挂钩。
/// <summary>
/// Attach this behaviour to any framework element to allow the entire parent window to be moved
/// when you click and drag this element.
/// </summary>
public class DragWindowBehaviour : Behavior<FrameworkElement>
{
private Window _parentWindow; protected override void OnAttached()
{
_parentWindow = GetParentWindow(AssociatedObject);
if (_parentWindow == null) return;
AssociatedObject.PreviewMouseLeftButtonDown += _associatedObject_MouseLeftButtonDown;
} private void _associatedObject_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_parentWindow.DragMove();
} private static Window GetParentWindow(DependencyObject attachedElement)
{
return attachedElement.TryFindParent<Window>();
} protected override void OnDetaching()
{
AssociatedObject.PreviewMouseLeftButtonDown -= _associatedObject_MouseLeftButtonDown;
_parentWindow = null;
}
}
|
|
|
正如我所说,它是简单的代码。关键部分是_parentWindow.DragMove()调用,它有效地将拖动操作移交给Window控件。
这非常有帮助,谢谢!注意:TryFindParent()似乎不能从DependencyObject中获得,因此我使用了Window.GetWindow(attachedElement)。
对于那些对我这样的行为不熟悉的人,你可以把它放在一个元素里面:
WPF:拖动父窗口行为的更多相关文章
- WPF 自定义的窗口拖动
WPF原有的窗口样式太丑,当我们重新定义窗口时,则需要添加一些额外的功能,如拖动~ 1.在界面上对布局元素如Grid,添加委托事件: MouseLeftButtonDown="UIEleme ...
- “父窗口拖动的时候Popup不随着父窗口移动”问题的解决方案
我们用WPF用的Popup时候会发现,当 StaysOpen=True 的时候,因为Popup不会消失,在父窗口移走的时候Popup仍旧在原地...作者在国外网站上无意间发现了这个解决方案,拿出来给大 ...
- Qt中,当QDockWidget的父窗口是一个不可以拖动的QTabWidget的时候实现拖动的方法
之前在做有关QDockWidget的内容时候遇到了瓶颈,那就是窗口弹出来之后拖动不了,也不可以放大和缩小,若是弹出来之后设置成了window的flags,也不可以拖动,而且也不是需要的效果. 1.弹出 ...
- 在wpf或winform关闭子窗口或对子窗口进行某个操作后刷新父窗口
父窗口: ///<summary> ///弹出窗口 ///</summary> ///<param name="sender"></pa ...
- WPF拖动总结[转载]
WPF拖动总结 这篇博文总结下WPF中的拖动,文章内容主要包括: 1.拖动窗口 2.拖动控件 Using Visual Studio 2.1thumb控件 2.2Drag.Drop(不连续,没有中 ...
- windows窗口分析,父窗口,子窗口,所有者窗口
(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++.Windows编程及MFC经验,还得有一定动手能力.文中可能出现一些术语不统一的现象 ...
- WPF编程学习——窗口
转自 http://www.cnblogs.com/libaoheng/archive/2011/11/18/2253751.html 本文目录 1.窗口的外观 2.窗口的位置 3.窗口的大小 4.窗 ...
- WPF中控制窗口显示位置的三种方式
首先新建一个WPF工程,在主界面添加一个按钮,并给按钮添加点击事件button1_Click,然后新建一个用于测试弹出位置的窗口TestWindow.1.在屏幕中间显示,设置window.Window ...
- 【MFC】如何在MFC创建的程序中更改主窗口的属性 与 父窗口 WS_CLIPCHILDREN 样式 对子窗口刷新的影响 与 窗体区域绘制问题WS_CLIPCHILDREN与WS_CLIPSIBLINGS
如何在MFC创建的程序中更改主窗口的属性 摘自:http://blog.sina.com.cn/s/blog_4bebc4830100aq1m.html 在MFC创建的单文档界面中: (基于对话框的, ...
随机推荐
- 18、x264编码在zedboard上的实现(软编码)
一.x264开源包获取 x264-snapshot提供了开源x264源代码,已经在X86和ARM架构下均已实现.linux下可以使用git获得最新的代码包 git clone git://git.vi ...
- 《SPA设计与架构》之MV*框架
原文 简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲 1.认识MV*框架 2.传统UI设计模式 3.对框架的本质认识——框架有效性和框架分类 4.MV*基 ...
- opencv和linux的关联
这是一篇关于opencv和linux关联的文章
- STL algorithm算法make_heap和sort_heap(32)
make_heap原型: std::make_heap default (1) template <class RandomAccessIterator> void make_heap ( ...
- BootStrap让两个控件在一行显示
<div class="row"> <div> <label class="form-inline">参加单位:<in ...
- want cry -- 137,139,445
通过wireshark抓包发现smb的请求报文,目的端口为445,没有应答报文 之前设置了“阻止连接”导致smb访问被拒绝.修改为要求对连接进行加密 就可以访问
- 如何快糙好猛的使用libfacedetection库【最新版】
前言 最近已经很少看CSDN了.这一年多准备考研,基本上怕是不会再怎么上了.以前有一个http://blog.csdn.net/mr_curry/article/details/51804072 如何 ...
- XMPP之ios即时通讯客户端开发-配置XMPP基本信息(四)
前文已经有配置open fire,接下来要通过XMPP框架链接到open fire的服务器: 1.首先要在系统偏好设置里面打开open fire的服务器 2.代码中设置xmpp的myJID 有几个名词 ...
- svn服务配置
1关闭所有svn服务 nie-xiao-bo-mac-pro:svnproject mac$ killall -9 svnserve 2.开启某文件路径svn服务 nie-xiao-bo-mac-pr ...
- SQL生成n位随机字符串
--1.随着newid() go --创建一个视图(因为不能在功能直接用于newid()) create view vnewid as select newid() N'MacoId'; go --创 ...