Ich entwerfe ein WPF-Formular mit Window Style = None. Daher kann ich die Drag-Leiste im Formular nicht sehen. Wie kann ich das Formular mit WindowStyle = None verschieben?Ziehen und Verschieben eines WPF-Formulars nicht möglich
Antwort
Siehe this question.
Grundsätzlich verwenden Sie hierfür die Methode Window.DragMove.
In unserer Anwendung haben wir Windows mit WindowStyle auf "keine" eingestellt, wir haben die Funktionalität implementiert, um das Fenster zu ziehen, aber nur aus der Kopfzeile und nicht von irgendeinem Punkt im Fenster. Wir haben dies getan, indem wir einen Rahmen als Kopfzeile hinzugefügt haben und dann einen Daumen hinzugefügt haben, um den gesamten Rahmen zu füllen. Wir behandeln dann die DragDelta-Methode auf dem Thumb im Code-Behind für das Fenster.
<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>
Dann in der Code-Behind haben wir die folgenden Event-Handler ...
private void headerThumb_DragDelta(object sender, DragDeltaEventArgs e)
{
Left = Left + e.HorizontalChange;
Top = Top + e.VerticalChange;
}
Ich weiß nicht, ob dies besser als die andere Methode ist, es ist nur die Art, wie wir taten es.
ich ein Hauptfenster bin mit Seiten zu halten (ein Navigations Stil Programm erstellen), und in dem Code hinter meinem Hauptfenster, ich eingefügt diese ...
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// Begin dragging the window
this.DragMove();
}
... und es funktioniert wie ein Zauber. Dies ist mit windowstyle = none. Es ist in dem Sinne nett, dass Sie irgendwo auf die App klicken können und verschieben, anstatt nur auf eine obere Leiste beschränkt zu sein.
entweder in den Fenstern auf Ladefunktion oder innerhalb des Gitters ist auf Ladefunktion ein deligate verwenden die Dragmove() -Methode auf Maus auszulösen Klicken
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
this.MouseLeftButtonDown += delegate{DragMove();};
}
Statt MouseDown- sollten Sie Mouseleftbuttondown verwenden, da können Sie nur Anruf DragMove, wenn die primäre Maustaste gedrückt ist. –
@ DušanKnežević Ja das stimmt! Ich bin mit einer Lösung eingesprungen, um es schnell zu machen. –