Всем привет! Бывает при разработке программы, мы можем создать не стандартную форму приложения, или отключить границы окна. В таком случаи у нас загрузиться программа но мы не сможем ее двигать.
Для того что бы создать форму в качестве картинки вам нужно использовать изображение в Background или если у вас геометрическая фигура в виде формы тогда следующий код:
Title="MainWindow" Height="450" Width="800" AllowsTransparency="True" WindowStyle="None" Background="{x:Null}" MouseLeftButtonDown="Window_MouseLeftButtonDown" >
Как мы видим Background просто присваиваем Null если этого не сделать будет виден фон формы.

Решение WPF:
Достаточно обработать событие при нажатии левой кнопкой мыши по форме и вызвать всего лишь один метод DragMove(); который позволит перетаскивать окно за любую область.
private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// Для перетаскивания окна за любую область.
DragMove();
}
Альтернативное решение.
Для перемещения окна без формы заголовка можем воспользоваться winapi. Нам так же необходимо создать обработчик при нажатии кнопки мыши. Целый листинг кода ниже:
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool PostMessage(IntPtr hWnd, uint Msg, uint WParam, uint LParam);
[DllImport("user32", CharSet = CharSet.Auto)]
internal extern static bool ReleaseCapture();
const uint WM_SYSCOMMAND = 0x0112;
const uint DOMOVE = 0xF012;
const uint DOSIZE = 0xF008;
public Form1()
{
InitializeComponent();
// this.FormBorderStyle = FormBorderStyle.None;
// this.MouseDown += new MouseEventHandler(Form1_MouseDown);
// this.MouseDown += new MouseEventHandler(label1_MouseDown);
this.FormBorderStyle = FormBorderStyle.None;
this.MouseDown += new MouseEventHandler(Form1_MouseDown);
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
PostMessage(this.Handle, WM_SYSCOMMAND, DOMOVE, 0);
}
Такой пример можно использовать и для Winform приложений.
