Не могу перетащить и переместить форму WPF

Я создаю WPF-форму с Window Style = None. Поэтому я не вижу панель перетаскивания в форме. Как переместить форму с помощью WindowStyle = None Property?

Ответы

Ответ 1

Я использую главное окно для хранения страниц (создание программы стиля навигации), а в коде позади моего главного окна я вставил это...

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

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

... и он работает как шарм. Это с windowstyle = none. Его приятно в том смысле, что вы можете щелкнуть в любом месте приложения и перемещать его, а не ограничиваться только верхней панелью.

Ответ 3

В нашем приложении Windows с WindowStyle устанавливается как "none", мы внедрили функциональность для перетаскивания окна, но только из заголовка, а не из любой точки окна. Мы сделали это, добавив Border в качестве заголовка, а затем добавив Thumb для заполнения всей границы. Затем мы обрабатываем метод DragDelta на Thumb в коде для окна.

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

Я не знаю, лучше ли это, чем другой метод, так, как мы это сделали.

Ответ 4

либо внутри окна на функции загрузки, либо внутри сетки при загрузке используйте делят, чтобы вызвать метод DragMove() на мыши щелкните

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

Ответ 5

Если вы просто добавите this.DragMove(); и вы используете Bing Maps, тогда вы получите некоторое разочарование при попытке панорамирования карты.

Использование 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();
        }
    }