2009-11-19 11 views

Antwort

4

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.

43

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.

2

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();}; 
} 
+0

Statt MouseDown- sollten Sie Mouseleftbuttondown verwenden, da können Sie nur Anruf DragMove, wenn die primäre Maustaste gedrückt ist. –

+0

@ DušanKnežević Ja das stimmt! Ich bin mit einer Lösung eingesprungen, um es schnell zu machen. –