Window Style=None で WPF フォームを設計しています。そのため、フォームにドラッグバーが表示されません。WindowStyle=None プロパティを使用してフォームを移動するにはどうすればよいですか?
5 に答える
メインウィンドウを使用してページを保持し(ナビゲーションスタイルプログラムを作成)、メインウィンドウの後ろのコードにこれを挿入しました...
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// Begin dragging the window
this.DragMove();
}
...そしてそれは魅力のように機能します。これはwindowstyle=noneです。トップバーに限定されるのではなく、アプリの任意の場所をクリックして移動できるという意味で便利です。
この質問を参照してください。
基本的に、これにはWindow.DragMoveメソッドを使用します。
私たちのアプリケーションでは、WindowStyle が「none」に設定された Windows を使用しています。ウィンドウをドラッグする機能を実装しましたが、ウィンドウ内の任意のポイントからではなくヘッダーからのみです。これを行うには、Border をヘッダーとして追加し、次に Thumb を追加して Border 全体を埋めました。次に、ウィンドウのコード ビハインドで 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;
}
これが他の方法よりも優れているかどうかはわかりませんが、それは私たちが行った方法です.
単純に追加this.DragMove();して Bing マップを使用している場合、マップをパンしようとすると、イライラする動作が発生します。
TabbyCoolの答えを使用することは良い解決策でしたが、ウィンドウを画面の上部にドラッグして最大化することはできません。
私の解決策は、トップバーグリッドに対するクリックの位置が適切な量よりも少ないことを確認することでした。
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
Point pt = e.GetPosition(topBar);
Debug.WriteLine(pt.Y);
if (pt.Y < topBar.ActualHeight)
{
DragMove();
}
}