2009-11-19 6 views

risposta

4

Nella nostra applicazione abbiamo Windows con WindowStyle impostato su "none", abbiamo implementato la funzionalità per trascinare la finestra, ma solo dall'intestazione anziché da qualsiasi punto della finestra. Lo abbiamo fatto aggiungendo un bordo come intestazione, quindi aggiungendo un pollice per riempire l'intero bordo. Quindi gestiamo il metodo DragDelta sul Thumb nel code-behind per la finestra.

<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> 

Poi nel code-behind abbiamo il seguente gestore di eventi ...

private void headerThumb_DragDelta(object sender, DragDeltaEventArgs e) 
{ 
    Left = Left + e.HorizontalChange; 
    Top = Top + e.VerticalChange; 
} 

Non so se questo è meglio che l'altro metodo, è solo il modo in cui abbiamo fatto esso.

43

Sto usando una finestra principale per contenere le pagine (creazione di un programma di stile di navigazione), e nel codice dietro della mia finestra principale, ho inserito questo ...

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
{ 
    base.OnMouseLeftButtonDown(e); 

    // Begin dragging the window 
    this.DragMove(); 
} 

... e funziona come un fascino. Questo è con windowstyle = none. È bello nel senso che è possibile fare clic in qualsiasi punto dell'app e spostarlo anziché limitarsi a una barra in alto.

2

sia all'interno delle finestre sulla funzione del carico o all'interno della griglia è sulla funzione del carico utilizzare un deligate per attivare il metodo DRAGMOVE() cliccando con il mouse

private void Grid_Loaded(object sender, RoutedEventArgs e) 
{ 
      this.MouseLeftButtonDown += delegate{DragMove();}; 
} 
+0

Invece di MouseDown si dovrebbe usare MouseLeftButtonDown, come si può solo chiamata DragMove quando il pulsante principale del mouse non è attivo. –

+0

@ DušanKnežević sì è vero! Sono saltato dentro con una soluzione per dargli una corsa veloce. –

Problemi correlati