| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- /*************************************************************************************
- Extended WPF Toolkit
- Copyright (C) 2007-2013 Xceed Software Inc.
- This program is provided to you under the terms of the Microsoft Public
- License (Ms-PL) as published at http://wpftoolkit.codeplex.com/license
- For more features, controls, and fast professional support,
- pick up the Plus Edition at http://xceed.com/wpf_toolkit
- Stay informed: follow @datagrid on Twitter or Like http://facebook.com/datagrids
- ***********************************************************************************/
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Data;
- using Xceed.Wpf.AvalonDock.Layout;
- using System.Windows;
- using System.Windows.Controls.Primitives;
- using System.Windows.Media;
- using Microsoft.Windows.Shell;
- namespace Xceed.Wpf.AvalonDock.Controls
- {
- public class LayoutDocumentFloatingWindowControl : LayoutFloatingWindowControl
- {
- static LayoutDocumentFloatingWindowControl()
- {
- DefaultStyleKeyProperty.OverrideMetadata(typeof(LayoutDocumentFloatingWindowControl), new FrameworkPropertyMetadata(typeof(LayoutDocumentFloatingWindowControl)));
- }
- internal LayoutDocumentFloatingWindowControl(LayoutDocumentFloatingWindow model)
- :base(model)
- {
- _model = model;
- }
- LayoutDocumentFloatingWindow _model;
- public override ILayoutElement Model
- {
- get { return _model; }
- }
- public LayoutItem RootDocumentLayoutItem
- {
- get { return _model.Root.Manager.GetLayoutItemFromModel(_model.RootDocument); }
- }
- protected override void OnInitialized(EventArgs e)
- {
- base.OnInitialized(e);
- if (_model.RootDocument == null)
- {
- InternalClose();
- }
- else
- {
- var manager = _model.Root.Manager;
- Content = manager.CreateUIElementForModel(_model.RootDocument);
- _model.RootDocumentChanged += new EventHandler(_model_RootDocumentChanged);
- }
- }
- void _model_RootDocumentChanged(object sender, EventArgs e)
- {
- if (_model.RootDocument == null)
- {
- InternalClose();
- }
- }
- protected override IntPtr FilterMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
- {
- switch (msg)
- {
- case Win32Helper.WM_NCLBUTTONDOWN: //Left button down on title -> start dragging over docking manager
- if (wParam.ToInt32() == Win32Helper.HT_CAPTION)
- {
- if (_model.RootDocument != null)
- _model.RootDocument.IsActive = true;
- }
- break;
- case Win32Helper.WM_NCRBUTTONUP:
- if (wParam.ToInt32() == Win32Helper.HT_CAPTION)
- {
- if (OpenContextMenu())
- handled = true;
- if (_model.Root.Manager.ShowSystemMenu)
- WindowChrome.GetWindowChrome(this).ShowSystemMenu = !handled;
- else
- WindowChrome.GetWindowChrome(this).ShowSystemMenu = false;
- }
- break;
- }
- return base.FilterMessage(hwnd, msg, wParam, lParam, ref handled);
- }
- bool OpenContextMenu()
- {
- var ctxMenu = _model.Root.Manager.DocumentContextMenu;
- if (ctxMenu != null && RootDocumentLayoutItem != null)
- {
- ctxMenu.PlacementTarget = null;
- ctxMenu.Placement = PlacementMode.MousePoint;
- ctxMenu.DataContext = RootDocumentLayoutItem;
- ctxMenu.IsOpen = true;
- return true;
- }
- return false;
- }
- protected override void OnClosed(EventArgs e)
- {
- var root = Model.Root;
- root.Manager.RemoveFloatingWindow(this);
- root.CollectGarbage();
- base.OnClosed(e);
- if (!CloseInitiatedByUser)
- {
- root.FloatingWindows.Remove(_model);
- }
- _model.RootDocumentChanged -= new EventHandler(_model_RootDocumentChanged);
- }
- }
- }
|