在WPF中,Windowless窗口是指没有窗口边框和标题栏的窗口。默认情况下,Windowless窗口是不可拖动的,但我们可以通过以下方法实现在不获取InvalidOperationException的情况下使Windowless WPF窗口可拖动:
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);
}
}
<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命名空间。
领取专属 10元无门槛券
手把手带您无忧上云