我设计了一个窗口样式=无的WPF表单。所以我看不到表单中的拖动条。如何使用WindowStyle = None属性移动窗体?
答案 0 :(得分:53)
我正在使用一个主窗口来保存页面(创建导航样式程序),在我的主窗口后面的代码中,我插入了这个......
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
// Begin dragging the window
this.DragMove();
}
......它就像一个魅力。这是windowstyle = none。它的优点在于你可以点击应用程序的任何地方并移动它,而不仅仅局限于顶部栏。
答案 1 :(得分:6)
请参阅this question。
基本上,您使用Window.DragMove方法。
答案 2 :(得分:4)
在我们的应用程序中,Windows将WindowStyle设置为“none”,我们实现了拖动Window的功能,但只能从头部而不是从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;
}
我不知道这是否比其他方法更好,这只是我们这样做的方式。
答案 3 :(得分:3)
无论是在加载函数的窗口内还是在网格的加载函数内,都使用deligate来触发Mouse Click上的DragMove()方法
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
this.MouseLeftButtonDown += delegate{DragMove();};
}
答案 4 :(得分:0)
如果仅添加this.DragMove();
并且正在使用Bing地图,则在尝试平移地图时会出现一些令人沮丧的行为。
使用TabbyCool's answer是一个很好的解决方案,但是您不能将窗口拖到屏幕顶部以使其最大化。
我的解决方案是检查位置。相对于顶部栏的点击的Y值小于适当的值。
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
Point pt = e.GetPosition(topBar);
Debug.WriteLine(pt.Y);
if (pt.Y < topBar.ActualHeight)
{
DragMove();
}
}