Disegno un modulo WPF con Window Style = None. Quindi non riesco a vedere la barra di trascinamento nel modulo. Come posso spostare il modulo con WindowStyle = Nessuna proprietà?Impossibile trascinare e spostare un modulo WPF
risposta
Vedere this question.
Fondamentalmente si utilizza il metodo Window.DragMove per questo.
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.
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.
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();};
}
Invece di MouseDown si dovrebbe usare MouseLeftButtonDown, come si può solo chiamata DragMove quando il pulsante principale del mouse non è attivo. –
@ DušanKnežević sì è vero! Sono saltato dentro con una soluzione per dargli una corsa veloce. –