Wpf 让用户在窗口外抓住窗口调整大小

Wpf 让用户在窗口外抓住窗口调整大小,wpf,window-chrome,Wpf,Window Chrome,在我的WPF应用程序中,我通过设置窗口样式的WindowChrome属性来覆盖默认的窗口chrome(如上所述) 我希望用户能够抓取窗口,在窗口外调整几个像素,就像VisualStudio那样。我已经玩过了ResizeByOrderThickness,但它似乎只定义了窗口内的区域 我怎么能这样做 下面是演示Visual Studio和我的应用程序之间差异的gif Visual Studio的主窗口是WPF窗口,但它不使用操作系统提供的默认窗口chrome 相反,它创建了一个自定义的辉光效果:实际

在我的WPF应用程序中,我通过设置窗口样式的WindowChrome属性来覆盖默认的窗口chrome(如上所述)

我希望用户能够抓取窗口,在窗口外调整几个像素,就像VisualStudio那样。我已经玩过了ResizeByOrderThickness,但它似乎只定义了窗口内的区域

我怎么能这样做

下面是演示Visual Studio和我的应用程序之间差异的gif


Visual Studio的主窗口是WPF窗口,但它不使用操作系统提供的默认窗口chrome

相反,它创建了一个自定义的辉光效果:实际上,该效果是由四个本机窗口(每个窗口都有自己的
HWND
)实现的,它们放置在主(WPF)窗口周围,并使用辉光/阴影效果的位图进行渲染

由于这些窗口可以处理鼠标输入,因此即使在光标到达主窗口的边界之前,它们也可以将鼠标光标切换到调整大小模式

如果您认为创建自定义chrome窗口是值得的,那么可以尝试重新实现此功能

您也可以尝试使用第三方组件,或者按原样使用,或者根据提供的源代码创建自己的fork。例如,在图书馆的定制chrome窗口上查看


否则,如果您认为这个小功能不值得任何额外的努力,那么最好只接受默认功能。

背景
透明的地方添加一个
边框
,并设置它的
填充
。不幸的是,一个透明的边框(在这里您可以看穿应用程序),只有在WindowsStyle为None时才可能,然后您就完全失去了标准的调整大小功能。重新手动实现这一功能会让我走得有点远。但我担心这是您唯一的选择。
窗口之外的所有内容都不再是WPF。它是纯操作系统。但除此之外,我无法确认您的观察结果。Visual Studio和custom WPF
Window
的行为与此相同。只需将光标移到边框上,然后按下鼠标按钮,并使用事件参数中的鼠标位置调整鼠标移动时的窗口大小。