示例#1
0
        public void ShowOrUpdateMessage(string message, string title, Action onClose, bool isShowDateTime)
        {
            var currPage = WorkPage.CurrentPage;

            if (currPage == null)
            {
                return;
            }

            if (_messageWindow == null)
            {
                _messageWindow = new XamDialogWindow
                {
                    StartupPosition        = StartupPosition.Center,
                    ModalBackground        = System.Windows.Media.Brushes.LightSteelBlue,
                    ModalBackgroundOpacity = 0.5,
                    Header = title,
                    HeaderIconVisibility = Visibility.Collapsed,
                    IsModal     = true,
                    IsResizable = false,
                };

                SetRowSpan(_messageWindow, 10);
                SetColumnSpan(_messageWindow, 10);

                if (Children != null)
                {
                    Children.Add(_messageWindow);
                }
                _messageWindow.WindowStateChanged += s_WindowStateChanged;
            }

            var messagePanel = _messageWindow.Content as MessagePanel;

            if (messagePanel == null)
            {
                messagePanel           = new MessagePanel(onClose);
                _messageWindow.Content = messagePanel;
            }

            messagePanel.AddOrUpdateMessage(message, isShowDateTime);

            if (_messageWindow.WindowState == WindowState.Hidden)
            {
                _messageWindow.Show();
            }

            _messageWindow.BringToFront();
            _messageWindow.IsActive = true;

            if (_messageWindow.Dispatcher == null)
            {
                return;
            }

            _messageWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                if (_messageWindow == null)
                {
                    return;
                }

                var mp = _messageWindow.Content as MessagePanel;
                if (mp == null)
                {
                    return;
                }

                var lv = mp.FindName("lvMessages") as ListView;
                if (lv == null)
                {
                    return;
                }


                //Подогнать размер под содержимое
                //lv.UpdateLayout();
                //messagePanel.UpdateLayout();
                //_messageWindow.Height = lv.ActualHeight + 90;
                //_messageWindow.Width = lv.ActualWidth + 30;
                _messageWindow.UpdateLayout();

                _messageWindow.CenterDialogWindow();
            }), DispatcherPriority.Background);
        }
示例#2
0
        public void ShowLocalModal(FrameworkElement content, object title, bool isResizable = true, bool isSpan = false, bool isNotCloseOnEscapeButton = false, bool allowCloseWindow = true)
        {
            var children = content as ILocalChildren;

            System.Windows.Media.Brush modalBackground = null;
            _isNotCloseOnEscapeButton = isNotCloseOnEscapeButton;
            var isTrueModal = false;
            var id          = Guid.Empty;

            if (children != null)
            {
                if (children.Id == Guid.Empty)
                {
                    children.Id = Guid.NewGuid();
                }
                id = children.Id;

                if (children.LocalModalType != EnumLocalModalType.None)
                {
                    //Проверка открыто ли окно с таким содержимым
                    if (children.LocalModalType == EnumLocalModalType.UniqueById)
                    {
                        XamDialogWindow dw;
                        if (DialogWindowsCollection.TryGetValue(id, out dw) && dw != null && dw.WindowState != WindowState.Hidden)
                        {
                            return;
                        }
                        //Изменен тип коллекции, но логика сохранена
                        //if (dw.WindowState == WindowState.Hidden) return false;
                        //if (ch == null) return false;
                        //return ch.LocalModalType == EnumLocalModalType.UniqueById && ch.Id == children.Id;
                    }

                    if (children.LocalModalType == EnumLocalModalType.TrueModal)
                    {
                        modalBackground = System.Windows.Media.Brushes.LightSteelBlue;
                        isTrueModal     = true;
                    }
                }
            }

            if (id == Guid.Empty)
            {
                id = Guid.NewGuid();
            }

            var xamDialogWindow = new XamDialogWindow
            {
                StartupPosition       = StartupPosition.Center,
                ModalBackground       = modalBackground,
                Header                = title,
                IsModal               = true,
                IsResizable           = isResizable,
                Content               = content,
                Tag                   = id,
                CloseButtonVisibility = allowCloseWindow? Visibility.Visible: Visibility.Collapsed
            };

            if (isSpan)
            {
                if (RowDefinitions.Count > 0)
                {
                    SetRowSpan(xamDialogWindow, RowDefinitions.Count);
                }
                if (ColumnDefinitions.Count > 0)
                {
                    SetColumnSpan(xamDialogWindow, ColumnDefinitions.Count);
                }
            }

            Children.Add(xamDialogWindow);

            xamDialogWindow.WindowStateChanged += s_WindowStateChanged;
            if (isTrueModal)
            {
                xamDialogWindow.IsActiveChanged += xamDialogWindow_IsActiveChanged;
            }

            xamDialogWindow.Loaded   += XamDialogWindow_Loaded;
            xamDialogWindow.Unloaded += XamDialogWindow_Unloaded;

            xamDialogWindow.Show();

            if (!DialogWindowsCollection.IsEmpty)
            {
                var prevWindow = DialogWindowsCollection.Values.Last();
                if (prevWindow != null && prevWindow.WindowState != WindowState.Hidden)
                {
                    xamDialogWindow.Margin = new Thickness(prevWindow.Margin.Left + 6, prevWindow.Margin.Top + 12, 0, 0);
                }
            }

            if (isResizable)
            {
                xamDialogWindow.SizeChanged += OnDwSizeChanged;
            }
            else if (DialogWindowsCollection.IsEmpty)
            {
                SizeChanged += OnParentSizeChanged;
            }

            DialogWindowsCollection.TryAdd(id, xamDialogWindow);

            xamDialogWindow.Dispatcher.BeginInvoke((Action)(() => { xamDialogWindow.CenterDialogWindow(); }),
                                                   DispatcherPriority.Background);
        }