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