Существует гораздо более простой способ включить перетаскивание или перемещение Window
без полей. См. метод Window.DragMove
на странице MSDN для получения более подробной информации, но вкратце вам просто нужно добавить эту строку в свой код в одном из обработчиков событий, связанных с нажатием кнопки мыши:
public YourWindow()
{
InitializeComponent();
MouseLeftButtonDown += YourWindow_MouseLeftButtonDown;
}
...
private void YourWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DragMove(); // <-- this is all you need to add
}
Затем пользователи смогут щелкнуть любую область Window
(в зависимости от того, что вы в нее поместите) и перетащить ее по экрану.
ОБНОВЛЕНИЕ >>>
Так что кажется, что ваши требования шире, чем я заметил сначала. Чтобы достичь того, чего вы хотите, есть ряд вещей, которые вы должны сделать. Во-первых, вам нужно расположить дочерний элемент Window
в определенном месте относительно MainWindow.xaml Window
. Когда вы откроете его, сделайте что-то вроде этого:
Window window = new Window();
window.Top = this.Top;
window.Left = this.Left;
window.LocationChanged += Window_LocationChanged;
window.ShowDialog();
Дочерняя позиция Window
может быть смещена на некоторую заданную величину:
Window window = new Window();
window.Top = this.Top + someHorizontalOffsetAmount;
window.Left = this.Left + someVerticalOffsetAmount;
window.LocationChanged += Window_LocationChanged;
window.ShowDialog();
Затем вам нужен обработчик события Window.LocationChanged
(которое возникает при перемещении дочернего элемента Window
):
private void Window_LocationChanged(object sender, EventArgs e)
{
Window window = (Window)sender;
this.Top = window.Top;
this.Left = window.Left;
}
Вот и все! Теперь два Window
будут двигаться вместе. Очевидно, что если вы используете смещение в первом примере, вам нужно будет использовать те же смещения в обработчике Window_LocationChanged
.
person
Sheridan
schedule
20.05.2014