首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在不获取InvalidOperationException的情况下使Windowless WPF窗口可拖动

在WPF中,Windowless窗口是指没有窗口边框和标题栏的窗口。默认情况下,Windowless窗口是不可拖动的,但我们可以通过以下方法实现在不获取InvalidOperationException的情况下使Windowless WPF窗口可拖动:

  1. 创建一个自定义的Window类,继承自System.Windows.Window,并重写OnSourceInitialized方法。
代码语言:csharp
复制
public class CustomWindow : Window
{
    protected override void OnSourceInitialized(EventArgs e)
    {
        base.OnSourceInitialized(e);
        
        // 获取窗口句柄
        IntPtr handle = new WindowInteropHelper(this).Handle;
        
        // 设置窗口样式为可拖动
        WindowInteropHelper.SetWindowLong(handle, WindowInteropHelper.GWL_STYLE,
            WindowInteropHelper.GetWindowLong(handle, WindowInteropHelper.GWL_STYLE) | WindowInteropHelper.WS_SIZEBOX);
    }
}
  1. 在XAML中使用自定义的Window类。
代码语言:xaml
复制
<local:CustomWindow x:Class="YourNamespace.YourWindow"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:YourNamespace"
                    Title="Your Window Title" Height="300" Width="400">
    <!-- 窗口内容 -->
</local:CustomWindow>

通过以上步骤,我们可以在不获取InvalidOperationException的情况下使Windowless WPF窗口可拖动。这样用户就可以通过鼠标拖动窗口来改变其位置。

注意:以上代码示例中使用了WindowInteropHelper类来获取和设置窗口句柄以及窗口样式。这些操作需要引入System.Windows.Interop命名空间。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 多指触摸拖拽窗口 拖动修改窗口坐标

WPF 中,如果是鼠标点击拖动窗口坐标,可以调用 Window DragMove 方法,但是如果是触摸,就需要自己调用 Win32 方法实现 在 WPF 中,调用 Window DragMove...WPF 中使用手指 finger 进行 Touch 触摸拖拽窗口拖动修改窗口坐标就需要用到 Win32 方法了。...相信大家都知道,在修改某个容器坐标的时候,不能使用这个容器内坐标做参考,所以在 Touch 拖动修改窗口坐标的时候,就不能使用监听窗口事件拿到坐标来作为参考 想要能平滑移动窗口,就需要获取相对于屏幕坐标...适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出窗口所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口任何部分和父窗口需要重画部分。...Way to make a Windowless WPF window draggable without getting InvalidOperationException - Stack Overflow

2.2K30

WPF dotnet 6 开启 PM v2 DPI 感知 导致触摸线程访问 UI 属性抛异常

修复之前, WPF 高速书写 StylusPlugIn 原理 描述,将会在 UI 线程收到触摸之前,先在触摸线程收到。...在触摸线程收到时,还没有找到命中元素,这就导致了拿到空值,无法处理当前命中到元素所在窗口,从而无法了解当前触摸点 DPI 参数。...于是触摸就因为拿不到 DPI 参数进行计算而偏移 我修复了触摸偏移问题是通过拿触摸输入源窗口句柄进行获取 DPI 计算。...获取触摸输入源窗口,不需要等待 UI 线程命中测试,于是修复了触摸偏移问题 然而以上输入引入了新问题,那就是在开启 PM v2 特性,在 DPI 变更之后,触摸比 UI 线程更快进入 GetAndCacheTransformToDeviceMatrix.../wpf 在 少珺 小伙伴帮助下,我修复了此问题,请看 Fix get TransformToDevice in Stylus Input thread will throw the InvalidOperationException

65000
  • 2020-5-22-如何使WPF窗口外部区域拖动缩放

    今天来和大家聊如何使WPF窗口外部区域拖动缩放。 ---- 问题来源 对于WPF窗口来说,默认拖动缩放区域较小。 在某些应用场景下我们期望能够设置一个较大拖动缩放区域。...,而在外部依然不可以进行拖动缩放 image.png 添加外部窗口 想要在WPF窗口外部能够拖动缩放,问题关键就在于如何能在外部收到鼠标点击拖动等消息。...SizeChanged主要是通知辅助窗口调整位置和大小,确定包裹在主窗口周围 StateChanged和IsVisibleChanged用于通知窗口显示隐藏,避免主窗口隐藏时,辅助窗口还能被拖动 Closed...有了这些事件,辅助窗口就能够跟随主窗口进行变换了。 通知主窗口 接下来一个重要事情就是辅助窗口被点击拖动时,通知主窗口进行拖动缩放。...alpha值为0x01 Opacity = 1.0 / ; 效果呈现 最后就可以得到如下效果,我们可以在窗口外部进行拖动,让主窗口进行缩放了。

    1.9K10

    dotnet 从入门到放弃 500 篇文章合集

    输出 C# 如何在项目引用x86 x64非托管代码 C# 已知点和向量,求距离点 C# 强转会不会抛出异常 C# 很少人知道科技 C# 快速释放内存大数组 C# 搜索算法 C# 获得设备usb...+Tab 隐藏窗口 WPF 好看矢量图标 wpf 如何使用 Magick.NET 播放 gif 图片 WPF何在 WriteableBitmap 写文字 WPF何在应用程序调试启动 WPF何在绑定失败异常...WPF 弹出 popup 里面的 TextBox 无法输入汉字 WPF 拖动时出现 Invalid FORMATETC structure WPF 拖动滚动 wpf 拦截异常 让多线程异常不会让程序闪退...ViewBox 不显示线问题 WPF 解决 xaml 设计显示异常 WPF 解决弹出模态窗口关闭后,主窗口不在最前 WPF 设置纯软件渲染 WPF 设置输入只能英文 WPF 调试 获得追踪输出 WPF...如何使用本模板搭建博客 如何入门 C++ AMP 教程 如何写毕业论文 表格 如何删除错误提交 git 大文件 如何在 UWP 使用 wpf Trigger 如何安装 btsync 如何移动 nuget

    10.4K20

    WPF AvalonDock拖拽布局学习整理

    大家好,又见面了,我是你们朋友全栈君。 AvalonDock提供了一个系统,允许开发人员使用类似于许多流行集成开发环境(IDE)中窗口对接系统来创建自定义布局。...命名空间中包含类表示; 这些类是一组显示用户控件可调节控件。...Anchobles也可以拖动到父DockingManager边框,这使它们出现在所有其他anchorables或文档上方,下方,左侧或右侧(自动隐藏窗口除外;请参阅下面的LayoutAnchorSide.../高度,从它们拖动内容创建浮动窗口初始宽度/高度,以及窗格中窗格方向。.../高度,浮动初始宽度/高度从根据它们拖动内容创建窗口,以及组中窗格方向(与LayoutPanel方向无关)。

    2.7K30

    WPF 附加属性提供某个元素拥有拖拽窗口功能

    我需要窗口某个元素拥有拖动整个窗口功能,也就是这个元素在拖动时候是拖动整个窗口。...而且我还开出一个有趣方法,这个作为窗口拖拽元素如果是用户在元素上拖动,那么将会拖动窗口,如果用户是点击,将会触发点击事件 附加属性可以给某个元素附加有趣功能,本文功能需要拖动元素时候实际上是拖动窗口...,第二个是元素是支持点击 拖动窗口使用窗口 DragMove 方法 元素支持点击用WPF 给任意控件通过按下移动抬起封装点击事件 方法 因此本文需要引入 WPF 给任意控件通过按下移动抬起封装点击事件...,请按照自己代码修改为你命名空间 此时尝试运行代码,拖动一下 DraggingElement 这个元素,可以看到拖动窗口。...,提供此属性仅仅是为了提升性能,可以设置。

    79320

    WPF 已知问题 在 ObservableCollection CollectionChanged 修改集合内容将让 UI 显示错误

    System.InvalidOperationException:“某个 ItemsControl 与它项源不一致。...\n请参见内部异常以获取更多信息。”...最常见原因有: (a)在未引发相应事件情况下更改了集合或集合计数,(b)引发事件使用了错误索引或项参数。...通过以上异常信息也可以了解到为什么 WPF 存在此已知问题,因为原本预期就是开发者不能在集合变更时修改集合,如果在每个集合变更里都需要重新处理状态,将会让 WPF 性能很差。...github 和 gitee 欢迎访问 可以通过如下方式获取本文源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文代码 git init

    2.5K30

    WPF基础之资源

    WPF允许在代码中以及在标记中各个位置定义资源(和特定控件、窗口一起定义,或在整个应用程序中定义)。资源具有如下优点。 高效。定义好资源可以在多个地方复用。 可维护性。易于修改。 适应性。...这意味着无论何时在WPF中改变画刷,所有使用该画刷控件都会自动更新。静态资源和动态资源区别在于静态资源只从资源集合中获取对象一次,动态资源每次需要对象时都会重新从资源集合中查找对象。...(例如实现动态皮肤特性,后台会讲到) 非共享资源 正常情况下资源使用是统一对象实例,这种行为成为共享,如果希望每次都创建一个新对象如下设置。...应用程序资源 窗口不是查找应用程序资源最后一站,如果在控件或其他容器中知道包含窗口或页面找不到指定资源。WPF会继续查找为应用程序定义资源。...SystemParamerers 封装了大量设置列表,这些设置描述了各种屏幕像素标准尺寸、键盘和鼠标设置、屏幕尺寸以及各种图形效果(热跟踪、阴影以及拖动窗口时显示窗口内容)是否已经打开。

    79731

    WPF 解决 ObservableCollection 提示 Cannot change ObservableCollection during a CollectionChanged event 异

    during a CollectionChanged event 内容,原因和解决方法 准确来说,这个异常和 WPF 是没有任何关系。...里,而且此异常可以在除 WPF 其他框架,比如控制台或者 UWP 上复现 想要解决此问题,还请先了解一下此异常抛出原因 在 ObservableCollection 设计上,是可以了解列表变更...如果在第一次调用方法时,在此方法内再次修改了 ObservableCollection 列表元素,那么将会让第二个方法进入时候,所获取状态和第一个方法所获取一定不相同 这个设计上问题,是很难解决...那为什么只加等 1 次时抛出呢?...在没有重写 ObservableCollection 情况下,可以认为 _blockReentrancyCount 只有在 OnCollectionChanged 方法更改 protected

    1.1K10

    关于WPF空域问题

    一、什么是空域 在顶层窗口中,您可以将每个包含互操作应用程序技术之一HWND概念化为有自己“空间”。窗口每个像素恰好属于一个HWND,这构成了该HWND空域。...(严格来说,如果有一个以上WPF高速公路,将会有一个以上WPF空域,但是为了解释这个概念,假设在本主题给出例子中只有一个)。...试图在Win32上呈现WPF像素会导致希望结果,并且通过互操作API尽可能不被允许(这段话是抄啦)这里有介绍,简单来说就是不同渲染技术导致了空域产生,最常见现象,wpf 上放一个winform...,司马当做活马医,将用户桌面改成basic主题,可是还是不行,直到有一天,我想看看我拖动窗口他位置什么情况,因为之前弹出窗口一直设置了AllowsTransparency = true,这次我去掉它,卧槽...居然可以拖动跟随并且跟win10下基本一样,区别必须给你要传入窗口设置一个颜色, 六、最后 win10情况下使用此方法基本没有问题 win7下需要特殊处理,首先不能应用areo效果,其次需要给嵌入窗口设置一个背景色

    1.5K60

    WPF面试题-来自ChatGPT解答

    WPF具有以下特点: 矢量图形:WPF支持矢量图形,可以实现高质量图形渲染,使应用程序具有更好外观和用户体验。...样式和模板:WPF允许开发人员使用样式和模板来定义应用程序外观和布局,使界面设计更加灵活和定制。 动画和转换:WPF支持丰富动画和转换效果,可以为应用程序添加生动和吸引人交互效果。...扩展性:XAML是扩展,可以通过自定义标记和扩展来满足特定需求,使开发人员能够更好地适应不同应用场景。 尽管XAML最初是为WPF设计,但它也被广泛应用于其他.NET技术中。...在WPF应用程序中,Page和Window是两种不同UI元素,它们有以下区别: 用途:Window用于创建独立顶级窗口,通常用作应用程序窗口。它可以包含其他UI元素,面板、控件等。...导航:Window通常涉及导航,它是一个独立窗口,用户可以通过操作系统窗口管理功能进行切换。

    40730

    准确判断一个 WPF 控件 UI 元素当前是否显示在屏幕内

    WPF 窗口是可以拖到屏幕外面去,所以拉几个元素到屏幕外很正常。你屏幕可能有多个。你多个屏幕可能有不同 DPI。你检测元素可能带有旋转。...项目,我们也需要引用 Windows Forms,用于获取屏幕相关信息。...因为 WPF 坐标单位是“设备无关单位”(我更倾向于叫有效像素,见 有效像素(Effective Pixels)),所以在系统对窗口有缩放行为时候,多屏不同 DPI 计算相当复杂,所以这里我们使用纯...关于 DPI 感知设置问题,阅读我其他博客: Windows 下高 DPI 应用开发(UWP / WPF / Windows Forms / Win32) - walterlv 支持 Windows...代码版本 偷懒版 日常版 苛刻版 基础判断屏幕内外 ✔️ ✔️ ✔️ 高分屏(非 96 DPI) ✔️ ✔️ ✔️ 整齐排列多屏 ✔️ ✔️ ✔️ 元素带有旋转 ❌ ✔️ ✔️ 多屏尺寸统一 ❌ ❌

    66340

    WPF 后台代码做 TranslateTransform 动画

    X 或 Y 就不会有任何值变更 在 WPF 中,通过 官方文档 里面的描述,对于 Freezable 类型对象, SolidColorBrush 和 RotateTransform 和 GradientStop...NameScope 里,不然将会提示 System.InvalidOperationException 不存在解析名称“xx”适用名称领域,如下面代码 System.InvalidOperationException...:“不存在解析名称“ButtonTranslateTransform”适用名称领域。”...好在官方文档里面有说到这点 本文代码还请到 github 或 gitee 上阅读代码 可以通过如下方式获取本文源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码...github.com/lindexi/lindexi_gd.git 获取代码之后,进入 KayceefiwhearHaijanihukere 文件夹 Storyboards Overview - WPF

    79420

    WPF 制作高性能透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    如果不想自定义窗口样式,还需要设置 Background="Transparent"。这样设置会让窗口变成 Layered Window,WPF 在这种类型窗口渲染性能是非常糟糕。...本文介绍如何使用 WindowChrome 而设置 AllowsTransparency="True" 制作背景透明异形窗口,这可以避免异形窗口导致低渲染性能。...值得注意是,由于在使用 WindowChrome 制作透明窗口时候设置了 ResizeMode="None",所以你拖动窗口在屏幕顶部和左右两边时候,Windows 不会再帮助你最大化窗口或者靠边停靠窗口...不过窗口标题栏拖动功能依然保留了下来,标题栏上右键菜单也是可以继续使用。...请参见:WPF 制作支持点击穿透高性能透明背景异形窗口

    1.6K20

    浅谈WPF之控件拖拽与拖动

    那如何在WPF程序中,实现类似的功能呢?今天就以一个简单小例子,简述如何在WPF中实现控件拖拽和拖动,仅供学习分享使用,如有不足之处,还请指正。...涉及知识点 WPF控件拖拽与拖动,主要涉及知识点如下所示: 容器布局,本示例采用左右布局,主容器采用Grid并分成两列进行布局,左侧图标库采用UniformGrid布局,右侧画布采用Canvas布局...控件拖动,当图标库中图标拖拽到新画布容器后,就会生成一个新控件,通过属性按下事件,鼠标移动事件,鼠标升起事件,来实现控件拖动。 实现步骤 1....通过e.GetPosition方法获取鼠标相对位置。参数是相对对象,Canvas容器等。...示例效果 本示例主要为了说明,只是简单地实现了拖拽,拖动等效果,具体如下所示: 以上就是WPF之控件拖拽与拖动全部内容,希望能够一起学习,共同进步。

    44810

    SilverlightaspxajaxmvcUI自动化测试

    有兴趣同学参考以下文章: http://msdn.microsoft.com/zh-cn/library/gg413374 http://www.cnblogs.com/scottxu/archive... 之所以选择它,理由很简单:它实在太容易上手了,不管新手老手,保证5分钟就能上手,而且支持几乎所有前端技术,包括ajax/aspx mvc/silverlight/wpf等....2、开始录制测试过程 默认情况下,新建项目已经有一个web Test项,而且会自动打开该项,如下: ?...点击OK关掉窗口,剩下事情就跟刚才测试百度完全一样 我在页面的ShowCase动画上随便点几个,记录下结果如下: ?...最后,我提供一个小技巧,也有助于解决这个问题,测试Silverlight录制时,如果启动录制后浏览器无法自动跳转到指定Web Url,可以手动在浏览器里输入网址,一般情况下Test Studio就能识别出当前页面有

    1K100

    【愚公系列】2023年11月 WPF控件专题 Track控件详解

    WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供内置控件,Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见标准用户界面元素。...一、Track控件详解Track控件是WPF一个基本控件,用于创建拖动滑动条。它允许用户通过拖动或单击来设置一个值。...该控件由Thumb、Selection和TickMarks组成,其中Thumb是拖动部分,Selection是表示当前选择值区域,TickMarks是用于标记刻度区域。...TickFrequency:设置刻度间隔。IsDirectionReversed:如果为true,使Thumb从右向左拖动。...它具有良好定制性,可以根据不同需求进行定制化。3.具体案例Track控件是WPF中用于创建滑动滑块控件。下面是一个简单案例,演示如何使用Track控件来创建一个可调节音量大小控件。

    35211

    学习WPF——WPF布局——了解布局容器

    ,但有很多情况下需要从其他线程访问界面元素,那怎么办呢?...,比如UIElement为布局机制设置了基础,但FrameworkElement提供了支持它重要属性,:HorizontalAlignment、Margin等属性 Panel 是所有布局元素基类...来实现 GridSpliter分割窗口 经常有这样需求,需要通过拖动方式改变一个窗口内部区域大小...GridSpliter能很好满足这种需求, 在增加一行或一列大小同时,减小其他行或者列大小(因为一个窗口区域大小是固定,此消彼长) 注意HorizontalAlignment属性必须设置...均衡表格UniformGrid 当你希望使用Grid复杂行列设置,只希望把元素“平均”放置到界面上, 那么你可以使用UniformGrid来实现这样需求 ?

    2.3K50

    WPF 不禁用实时触摸而收到 WM_Touch 触摸消息方法

    因此想要在不禁用 WPF 实时触摸情况下获取 WM_Touch 触摸消息一个方法是通过 WinForms 窗口获取 在不禁用 WPF RealTimeStylus 实时触摸下,依然可以通过...WinForms 窗口获取触摸 WM_Touch 消息,只需要在 WinForms 窗口调用 RegisterTouchWindow 就可以 通过微软官方 WMTouchForm demo 代码,可以拿到一个用...文档 Disable the RealTimeStylus - WPF .NET Framework 所说,在 WPF RealTimeStylus 实时触摸和 WM_Touch 在同一个 HWND...是互斥,而 WinForms 默认一个控件就是一个 HWND 因此 WinForms 就能收到触摸消息 在 WPF 中,在不禁用实时触摸情况下,所有的 WPF 窗口是无法通过 RegisterTouchWindow...无盈利,卖课,做纯粹技术博客

    77130
    领券