27

我设计了一个 Window Style=None 的 WPF 表单。所以我看不到表单中的拖动条。如何使用 WindowStyle=None 属性移动表单?

4

5 回答 5

70

我正在使用一个主窗口来保存页面(创建一个导航样式程序),并且在我的主窗口后面的代码中,我插入了这个......

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

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

...它就像一个魅力。这是windowstyle=none。从某种意义上说,它很好,您可以单击应用程序上的任意位置并移动它,而不仅仅是局限于顶部栏。

于 2010-02-21T21:17:09.100 回答
7

看到这个问题

基本上,您为此使用Window.DragMove方法。

于 2009-11-19T08:59:17.757 回答
6

在我们的应用程序中,我们将 WindowStyle 设置为“none”的 Windows,我们实现了拖动 Window 的功能,但仅从标题而不是从 Window 中的任何点拖动。我们通过添加一个边框作为标题来做到这一点,然后添加一个拇指来填充整个边框。然后,我们在 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;
}

我不知道这是否比其他方法更好,这就是我们这样做的方式。

于 2009-12-18T15:34:14.947 回答
4

在加载函数的窗口内或在网格的加载函数内,使用 deligate 在鼠标单击时触发 DragMove() 方法

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
            this.MouseLeftButtonDown += delegate{DragMove();};
}
于 2013-11-30T12:57:09.110 回答
1

如果您只是添加this.DragMove();并且正在使用 Bing 地图,那么在尝试平移地图时会遇到一些令人沮丧的行为。

使用TabbyCool 的答案是一个很好的解决方案,但是,您不能将窗口拖到屏幕顶部以使其最大化。

我的解决方案只是检查我的点击相对于我的顶部条形网格的 position.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();
        }
    }
于 2019-06-23T05:18:10.447 回答