private void UpdatePropertiesPane()
        {
            if (DocumentPanes.Any() == false)
            {
                ClearCustomPropertiesPane();
                return;
            }

            var documentPane = DocumentPanes[SelectedDocumentPaneIndex];

            if (_customDocumentPaneProperties.ContainsKey(documentPane) == false ||
                _customDocumentPaneProperties[documentPane] == null)
            {
                CustomPropertyPane.Content = null;
                PropertyPanes.Remove(CustomPropertyPane);
                return;
            }

            CustomPropertyPane.Content = _customDocumentPaneProperties[documentPane];

            if (PropertyPanes.Contains(CustomPropertyPane) == false)
            {
                PropertyPanes.Add(CustomPropertyPane);
            }

            FocusPropertyPane(CustomPropertyPane);
        }
        private void DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            if (e.Exception.GetType() != typeof(InvalidOperationException))
            {
                return;
            }

            var exception = e.Exception as InvalidOperationException;

            if (exception.Message != "Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead." ||
                exception.Source != "PresentationFramework")
            {
                return;
            }

            //Most probably user attempted to close active DocumentPane, so let's do it for him
            var pane = DocumentPanes[SelectedDocumentPaneIndex];

            DocumentPanes.Remove(pane);
            if (_customDocumentPanes.Values.Contains(pane))
            {
                var customPaneKey = _customDocumentPanes.First(x => x.Value == pane).Key;
                _customDocumentPanes.Remove(customPaneKey);
                _customDocumentPaneProperties.Remove(pane);
            }

            e.Handled = true;
        }
        public void Handle(ShowDocumentPaneMessage message)
        {
            var paneKey = string.Format("{0}_{1}_{2}", message.Sender.GetType().AssemblyQualifiedName, message.Sender.GetType().FullName, message.Title);

            if (_customDocumentPanes.ContainsKey(paneKey) == false || _customDocumentPanes[paneKey] == null)
            {
                var newPane = new RadPane();
                newPane.CanDockInDocumentHost = true;

                _customDocumentPanes[paneKey] = newPane;
            }

            var pane = _customDocumentPanes[paneKey];

            pane.Content = message.PaneContent;
            pane.Header  = message.Title;

            if (message.PaneProperties != null)
            {
                _customDocumentPaneProperties[pane] = message.PaneProperties;
            }

            if (DocumentPanes.Contains(pane) == false)
            {
                DocumentPanes.Add(pane);
            }

            FocusDocumentPane(pane);
        }
        private void RemoveDocumentPaneByKey(string paneKey)
        {
            if (_customDocumentPanes.ContainsKey(paneKey) == false)
            {
                return;
            }


            var pane = _customDocumentPanes[paneKey];

            _customDocumentPaneProperties.Remove(pane);
            DocumentPanes.Remove(pane);
            _customDocumentPanes.Remove(paneKey);
        }
 private void FocusDocumentPane(RadPane pane)
 {
     SelectedDocumentPaneIndex = DocumentPanes.IndexOf(pane);
 }