2013-12-22 3 views
0

У меня есть приложение WPF, что я удалить пограничные и стандартные элементы управления, выполнив следующие действия:MouseDown событие на новом окне не DragMove MainWindow

WindowStyle="None" AllowsTransparency="True" 

Теперь я добавил обработчик MouseDown MouseDown = «Window_MouseDown» и добавил следующий код, чтобы позволить мне переместить мое окно вокруг:

private void Window_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     try 
     { 
      if (e.ChangedButton == MouseButton.Left) 
       DragMove(); 
     } 
     catch (Exception ex) { } 
    } 

Но теперь у меня есть UserControl, который я хочу, чтобы изменить размер до полного размера моего приложения, так что для достижения этой цели я создал новое окно, t он такого же размера, как мой MainWindow, и разместил на нем UserControl. Я создаю этот новый окно и установить его родителей, чтобы быть моим основным приложением так:

public MyFullScreenWindow() 
    { 
     InitializeComponent(); 

     this.Owner = App.Current.MainWindow; 

    } 

я запускаю это окно следующим образом:

  MyFullScreenWindow fullScreen = new MyFullScreenWindow(); 
      fullScreenVideo.ShowDialog(); 

Моя проблема заключается в том, что я хочу, чтобы все-таки переместить все мое приложение когда пользователь нажимает и перемещает это новое окно. Для достижения этой цели я добавил событие в MyFullScreenWindow:

public partial class MyFullScreenWindow: Window 
{ 
    static public event EventHandler MouseDownEvent; 


    public MyFullScreenWindow() 
    { 
     InitializeComponent(); 

     this.Owner = App.Current.MainWindow; 
    } 



    private void Window_MouseDown(object sender, MouseButtonEventArgs e) 
    { 
     if (MouseDownEvent != null) 
     { 
      MouseDownEvent(sender, e); 
     } 
    } 
} 

И я обрабатывать это событие в моей MainWindow так:

MyFullScreenWindow.MouseDownEvent += new EventHandler(MyFullScreenMouseDownHandler); 

    private void MyFullScreenMouseDownHandler(object sender, EventArgs e) 
    { 

     DragMove(); 

    } 

Но когда я нажимаю и перетащить я вижу, что событие отстреливается но все мое приложение не движется так, как должно. Почему это??

ответ

0

Я не знаю контекста вашей проблемы, но зачем вам создавать новое окно, «разместить» его внутри родительского? Вы можете использовать элементы управления, не создавая новое окно.

Возможно, что вы делаете это, потому что вам нужно AllowTransparency = false, показывая его в окне AllowTransparency = true. (У меня был этот случай при работе с DirectShow). Если вы делаете это для пользовательского окна chrome, то не используйте AllowTransparency - это значительно снижает производительность. В конце концов, это создает изображение каждого кадра и отключает ускорение GPU! Вместо этого вы можете адаптироваться к проекту CustomChromeWindow (найденному в Internet).

Обратите внимание, что вы можете включить основное окно так, что он будет обрабатывать сообщения из основного окна:

public class WindowSecond : Window 
    { 
     public WindowSecond() 
     { 
      Owner = Application.Current.MainWindow; 
      MouseDown += delegate 
       { 
        // maybe cache it. 
        IntPtr handle = new WindowInteropHelper(Owner).Handle; 

        EnableWindow(handle, true); 
        Application.Current.MainWindow.DragMove(); 
        EnableWindow(handle, false); 
       }; 
     } 

     [DllImport("user32")] 
     internal static extern bool EnableWindow(IntPtr hwnd, bool bEnable); 
    } 
+0

Спасибо за ответ. См. Эту ссылку для контекста: http://stackoverflow.com/questions/20663921/make-a-usercontrol-on-a-page-the-same-size-as-the-mainwindow-in-wpf Когда я пытаюсь Ваше решение, и когда я перемещаю мышь, он действительно перемещает мой MainWindow в фоновом режиме, но новое полноэкранное окно остается в одном месте. Я хочу переместить их вместе (так что мое приложение выглядит как одно) # –

+0

Я сделал что-то похожее. Я не понимаю, почему вам нужны эти DragMoves и т. Д. Если окно полноэкранное, у него будут флаги NoResize & Maximized, что означает, что вы не можете перемещать полноэкранный режим. Вот как работают все экраны. –

+0

Помните, что вы всегда можете создать свой собственный DragMove(). Все, что вам нужно сделать: захватить мышь и координаты на MouseDownEvent. В MouseMoveEvent вы управляете окнами свойств Left & Top, Left + = mouseClickOrigin.X-curentMouseOrigin.X ;. Вам нужно будет освободить захват мыши на MouseReleasedEvent –

1

Просто добавьте следующий код функции только

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

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

переместить окно, в котором когда-либо вы хотите ,

+0

Да, это перемещает MyFullScreenWindow, но не перемещает MainWindow в фоновом режиме. –

+0

попробуйте выполнить два действия, сначала попробуйте назначить 'WindowOwner' этим окнам и написать тот же код для «MainWindow». –

Смежные вопросы