Не могу перетащить и переместить форму WPF
Я создаю WPF-форму с Window Style = None. Поэтому я не вижу панель перетаскивания в форме. Как переместить форму с помощью WindowStyle = None Property?
Ответы
Ответ 1
Я использую главное окно для хранения страниц (создание программы стиля навигации), а в коде позади моего главного окна я вставил это...
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// Begin dragging the window
this.DragMove();
}
... и он работает как шарм. Это с windowstyle = none. Его приятно в том смысле, что вы можете щелкнуть в любом месте приложения и перемещать его, а не ограничиваться только верхней панелью.
Ответ 2
См. этот вопрос.
В основном вы используете метод Window.DragMove.
Ответ 3
В нашем приложении Windows с WindowStyle устанавливается как "none", мы внедрили функциональность для перетаскивания окна, но только из заголовка, а не из любой точки окна. Мы сделали это, добавив Border в качестве заголовка, а затем добавив Thumb для заполнения всей границы. Затем мы обрабатываем метод DragDelta на Thumb в коде для окна.
<Border
Name="headerBorder"
Width="Auto"
Height="50"
VerticalAlignment="Top"
CornerRadius="5,5,0,0"
DockPanel.Dock="Top"
Background="{StaticResource BackgroundBrush}"
BorderThickness="1,1,1,1"
BorderBrush="{StaticResource BorderBrush}">
<Grid>
<Thumb
x:Name="headerThumb"
Opacity="0"
Background="{x:Null}"
Foreground="{x:Null}"
DragDelta="headerThumb_DragDelta"/>
</Grid>
</Border>
Затем в коде-образе мы имеем следующий обработчик событий...
private void headerThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
Left = Left + e.HorizontalChange;
Top = Top + e.VerticalChange;
}
Я не знаю, лучше ли это, чем другой метод, так, как мы это сделали.
Ответ 4
либо внутри окна на функции загрузки, либо внутри сетки при загрузке используйте делят, чтобы вызвать метод DragMove() на мыши щелкните
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
this.MouseLeftButtonDown += delegate{DragMove();};
}
Ответ 5
Если вы просто добавите this.DragMove();
и вы используете Bing Maps, тогда вы получите некоторое разочарование при попытке панорамирования карты.
Использование TabbyCool было хорошим решением, однако вы не можете перетащить окно к верхней части экрана, чтобы развернуть его.
Мое решение состояло в том, чтобы просто проверить, что позиция моего клика относительно моей верхней сетки была меньше подходящей.
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
Point pt = e.GetPosition(topBar);
Debug.WriteLine(pt.Y);
if (pt.Y < topBar.ActualHeight)
{
DragMove();
}
}