Я думаю, вы найдете ответ здесь полезно
Есть несколько скомпилированных способов добиться этого, но решение, которое я изложил, заключается в том, что приведенная выше ссылка проста и имеет только одну причуду, и, честно говоря, можно обойти эту проблему. При перетаскивании окна ввода оно не обеспечивает обратную связь до тех пор, пока перемещение не будет завершено, но вы можете обойти это, обработав некоторые не клиентские сообщения, я могу потратить некоторое время на просмотр обходного решения, если вам нужно, но сначала убедитесь, что это решение правильно для вас.
Обновление : пример того, как вышеуказанный подход может быть применен к форме WPF.
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Interop;
using System.Runtime.InteropServices;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
const int WS_EX_NOACTIVATE = 0x08000000;
const int GWL_EXSTYLE = -20;
[DllImport("user32", SetLastError = true)]
private extern static int GetWindowLong(IntPtr hwnd, int nIndex);
[DllImport("user32", SetLastError = true)]
private extern static int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewValue);
private void Window_Loaded(object sender, RoutedEventArgs e)
{
WindowInteropHelper wih = new WindowInteropHelper(this);
int exstyle = GetWindowLong(wih.Handle, GWL_EXSTYLE);
exstyle |= WS_EX_NOACTIVATE;
SetWindowLong(wih.Handle, GWL_EXSTYLE, exstyle);
}
}
}