2009-11-19 92 views
15

Window Style = NoneのWPFフォームを設計します。だから私はフォームにドラッグバーが表示されません。 WindowStyle = Noneプロパティを使用してフォームを移動するにはどうすればよいですか?WPFフォームをドラッグして移動する

答えて

4

私たちのアプリケーションでは、WindowStyleを「none」に設定したWindowsを使用していましたが、Windowをドラッグする機能は実装されていましたが、ウィンドウの任意のポイントからではなくヘッダーからのみでした。これは、Borderをヘッダとして追加した後、Thumbを追加してBorder全体を埋めることで行いました。次に、WindowのコードビハインドのThumbでDragDeltaメソッドを処理します。

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

に私は、これは他の方法よりも良くある場合、それは我々がやった方法だかわかりませんそれ。

43

私はページ(ナビゲーションスタイルのプログラムを作成する)を保持するために、メインウィンドウを使用していますし、私のメインウィンドウの背後にあるコードでは、私は...

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

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

これを挿入...そして、それは動作します魔法のように。これはwindowstyle = noneです。あなたがアプリのどこかをクリックして、トップバーに限られるのではなく、それを移動できるという意味では素晴らしいです。

2

ロード機能上の窓の内側またはグリッド内のいずれかは、ロード機能上のマウスにDragMove()メソッドをトリガーするdeligateを使うだけ呼び出すことができるよう、あなたが、のMouseLeftButtonDownを使用する必要があります代わりに、MouseDownイベントの

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

をクリックしますマウスの主ボタンが押されているときにDragMove。 –

+0

@DušanKneževićはい、それは本当です!私はそれをすばやく実行するためのソリューションで飛び込んだ。 –

関連する問題