Esempio n. 1
0
        /// <summary>
        /// Dependency property event once the focused value has changed.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param>
        private static void FocusedValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            if ((bool)e.NewValue == (bool)e.OldValue)
            {
                return;
            }

            MdiChild mdiChild = (MdiChild)sender;
            bool     focused  = (bool)e.NewValue;

            if (focused)
            {
                mdiChild.RaiseEvent(new RoutedEventArgs(GotFocusEvent, mdiChild));
            }
            else
            {
                mdiChild.RaiseEvent(new RoutedEventArgs(LostFocusEvent, mdiChild));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Dependency property event once the focused value has changed.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param>
        private static void FocusedValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            if ((bool)e.NewValue == (bool)e.OldValue)
            {
                return;
            }

            MdiChild mdiChild = (MdiChild)sender;
            bool     focused  = (bool)e.NewValue;

            if (focused)
            {
                mdiChild.Dispatcher.BeginInvoke(new Func <IInputElement, IInputElement>(Keyboard.Focus), System.Windows.Threading.DispatcherPriority.ApplicationIdle, mdiChild.Content);
                mdiChild.RaiseEvent(new RoutedEventArgs(GotFocusEvent, mdiChild));
            }
            else
            {
                mdiChild.RaiseEvent(new RoutedEventArgs(LostFocusEvent, mdiChild));
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Dependency property event once the windows state value has changed.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param>
        private static void WindowStateValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            MdiChild mdiChild = (MdiChild)sender;

            WindowState previousWindowState = (WindowState)e.OldValue;
            WindowState windowState         = (WindowState)e.NewValue;

            if (mdiChild.Container == null ||
                previousWindowState == windowState)
            {
                return;
            }

            if (previousWindowState == WindowState.Maximized)
            {
                for (int i = 0; i < mdiChild.Container.Children.Count; i++)
                {
                    if (mdiChild.Container.Children[i] != mdiChild &&
                        mdiChild.Container.Children[i].WindowState == WindowState.Maximized &&
                        mdiChild.Container.Children[i].MaximizeBox)
                    {
                        mdiChild.Container.Children[i].WindowState = WindowState.Normal;
                    }
                }

                ScrollViewer sv = (ScrollViewer)((Grid)mdiChild.Container.Content).Children[1];
                sv.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;
                sv.VerticalScrollBarVisibility   = ScrollBarVisibility.Auto;

                if (mdiChild.Buttons != null)
                {
                    mdiChild.Buttons.Children.Clear();
                }
                try
                {
                    mdiChild.buttonsPanel.Children.Add(mdiChild.minimizeButton);
                    mdiChild.buttonsPanel.Children.Add(mdiChild.maximizeButton);
                    mdiChild.buttonsPanel.Children.Add(mdiChild.closeButton);
                }
                catch { }
            }

            if (previousWindowState == WindowState.Minimized)
            {
                mdiChild.minimizedPosition = mdiChild.Position;
            }

            switch (windowState)
            {
            case WindowState.Normal:
            {
                mdiChild.Position = new Point(mdiChild.originalDimension.X, mdiChild.originalDimension.Y);

                if (mdiChild._minimizedWidth > 0 && mdiChild._minimizedHeight > 0)
                {
                    mdiChild.MinWidth  = mdiChild._minimizedWidth;
                    mdiChild.MinHeight = mdiChild._minimizedHeight;
                }

                mdiChild.Width  = mdiChild.originalDimension.Width;
                mdiChild.Height = mdiChild.originalDimension.Height;
            }
            break;

            case WindowState.Minimized:
            {
                if (previousWindowState == WindowState.Normal)
                {
                    mdiChild.originalDimension = new Rect(mdiChild.Position.X, mdiChild.Position.Y, mdiChild.ActualWidth, mdiChild.ActualHeight);
                }

                //double newLeft, newTop;
                //if (mdiChild.minimizedPosition.X >= 0 || mdiChild.minimizedPosition.Y >= 0)
                //{
                //    newLeft = mdiChild.minimizedPosition.X;
                //    newTop = mdiChild.minimizedPosition.Y;
                //}
                //else
                //{
                //    int minimizedWindows = 0;
                //    for (int i = 0; i < mdiChild.Container.Children.Count; i++)
                //        if (mdiChild.Container.Children[i] != mdiChild && mdiChild.Container.Children[i].WindowState == WindowState.Minimized)
                //            minimizedWindows++;
                //    int capacity = Convert.ToInt32(mdiChild.Container.InnerWidth) / mdiChild.MinimizedWidth,
                //        row = minimizedWindows / capacity + 1,
                //        col = minimizedWindows % capacity;
                //    newTop = mdiChild.Container.InnerHeight - mdiChild.MinimizedHeight * row;
                //    newLeft = mdiChild.MinimizedWidth * col;
                //}

                //mdiChild.Position = new Point(newLeft, newTop);

                int minimizedWindows = 0;
                for (int i = 0; i < mdiChild.Container.Children.Count; i++)
                {
                    if (mdiChild.Container.Children[i] != mdiChild && mdiChild.Container.Children[i].WindowState == WindowState.Minimized)
                    {
                        minimizedWindows++;
                    }
                }
                int cols  = (int)(mdiChild.Container.InnerWidth / mdiChild.MinimizedWidth);
                int count = 0;
                foreach (var item in mdiChild.Container.Children)
                {
                    if (item.WindowState == WindowState.Minimized)
                    {
                        item.Position = new Point((int)(count % cols) * item.MinimizedWidth, mdiChild.Container.InnerHeight - ((int)((int)(count / cols) + 1)) * item.MinimizedHeight);
                        count++;
                    }
                }

                mdiChild._minimizedWidth  = (int)mdiChild.MinWidth;
                mdiChild._minimizedHeight = (int)mdiChild.MinHeight;

                mdiChild.MinWidth  = mdiChild.MinimizedWidth;
                mdiChild.MinHeight = mdiChild.MinimizedHeight;

                mdiChild.Width  = mdiChild.MinimizedWidth;
                mdiChild.Height = mdiChild.MinimizedHeight;
            }
            break;

            case WindowState.Maximized:
            {
                if (previousWindowState == WindowState.Normal)
                {
                    mdiChild.originalDimension = new Rect(mdiChild.Position.X, mdiChild.Position.Y, mdiChild.ActualWidth, mdiChild.ActualHeight);
                }

                try
                {
                    StackPanel sp = new StackPanel {
                        Orientation = Orientation.Horizontal
                    };
                    mdiChild.Buttons = sp;
                    if (mdiChild.Container.Theme != ThemeType.Metro)
                    {
                        if (mdiChild.buttonsPanel != null)
                        {
                            mdiChild.buttonsPanel.Children.Clear();
                        }
                        sp.Children.Add(mdiChild.minimizeButton);
                        sp.Children.Add(mdiChild.maximizeButton);
                        sp.Children.Add(mdiChild.closeButton);
                    }
                }
                catch { }

                mdiChild.Position = new Point(0, 0);

                if (mdiChild._minimizedWidth > 0 && mdiChild._minimizedHeight > 0)
                {
                    mdiChild.MinWidth  = mdiChild._minimizedWidth;
                    mdiChild.MinHeight = mdiChild._minimizedHeight;
                }

                mdiChild.Width  = mdiChild.Container.InnerWidth;
                mdiChild.Height = mdiChild.Container.InnerHeight;

                if (mdiChild.Container.AllowWindowStateMax)
                {
                    MdiContainer mdiContainer = mdiChild.Container;
                    mdiContainer.AllowWindowStateMax = false;

                    for (int i = 0; i < mdiContainer.Children.Count; i++)
                    {
                        if (mdiContainer.Children[i] != mdiChild)
                        {
                            if (mdiContainer.Children[i].WindowState == WindowState.Normal &&
                                mdiContainer.Children[i].MaximizeBox)
                            {
                                mdiContainer.Children[i].WindowState = WindowState.Maximized;
                            }
                            else if (mdiContainer.Children[i].WindowState == WindowState.Maximized)
                            {
                                mdiContainer.Children[i].Height = mdiContainer.InnerHeight;
                            }
                        }
                    }

                    ScrollViewer sv = (ScrollViewer)((Grid)mdiContainer.Content).Children[1];
                    sv.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
                    sv.VerticalScrollBarVisibility   = ScrollBarVisibility.Hidden;

                    mdiChild.Focus();
                    mdiContainer.InvalidateSize();
                    mdiContainer.AllowWindowStateMax = true;
                }
            }
            break;
            }
            mdiChild.RaiseEvent(new RoutedEventArgs(WindowStateChangedEvent));
        }