无法拖动和移动WPF表单

时间:2009-11-19 08:57:05

标签: wpf window drag

我设计了一个窗口样式=无的WPF表单。所以我看不到表单中的拖动条。如何使用WindowStyle = None属性移动窗体?

5 个答案:

答案 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();
        }
    }