Właściwie to chodzi o referencje kontrolki, która na stałe zalega w pamięci.
Mam ciężką kontrolkę telerikową RadRichTextBox, która ładuje się kilka sekund. Tworzę ją przy uruchomieniu programu w osobnym wątku i przechowuję w pamięci. Następnie przy otwarciu popupa dodaję jej referencję do Grida, a przy zamknięciu tego popupa usuwam ją z tego Grida. Mniej więcej tak:
if (gridG.Children.Contains(textEditControl))
gridG.Children.Remove(textEditControl);
if (!gridG.Children.Contains(textEditControl))
gridG.Children.Add(textEditControl);
Na popupie jest expander, w którym na dwóch kartach jest podpinana. Znaczy Przy przełączeniu z jednego expandera na drugi w pierwszym jest odpinana, a w drugim podpinana, i na odwrót.
Gdy pierwszy raz otworzy się tego popupa to wszystko działa. Gdy jednak zamknie się tego popupa i otworzy go po raz drugi to przy każdym "przepinaniu" kontrolki rzucany jest wyjątek wewnętrzny telerika. Wstawienie fragmentu kodu w try/catch nie działa, bo wyjątek prawdopodobnie rzucany i obsługiwany jest wewnątrz biblioteki.
Dodam, że program kontynuuje działanie a kontrolka działa poprawnie. Pojawia się tylko błąd, który psuje dobre wrażenie.
Oto komunikat:
at Telerik.Windows.Documents.Layout.LayoutElement.SetParent(LayoutElement newParent)
at Telerik.Windows.Documents.Layout.LayoutBox.get_Parent()
at Telerik.Windows.Documents.DocumentPosition.GetCurrentTableCellBox()
at Telerik.Windows.Documents.DocumentPosition.GetCurrentTableRowBox()
at Telerik.Windows.Documents.DocumentPosition.GetCurrentTableBox()
at Telerik.Windows.Controls.RichTextBoxUI.TableStylesGallery.TrySetSelectedTableStyle()
at Telerik.Windows.Controls.RichTextBoxUI.TableStylesGallery.CaretPosition_PositionChanged(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at Telerik.Windows.Documents.DocumentPosition.OnPositionChanged()
at Telerik.Windows.Documents.Utils.SuspendChangingAndChangedActionCounter.InvokeChangedActionInternal()
at Telerik.Windows.Documents.Utils.SuspendChangingAndChangedActionCounter.InvokeChanged()
at Telerik.Windows.Documents.DocumentPosition.CallOnPositionChanged(Boolean changesCursorInitialLocation)
at Telerik.Windows.Documents.DocumentPosition.Reset()
at Telerik.Windows.Documents.Model.RadDocument.Measure(SizeF measureSize)
at Telerik.Windows.Documents.UI.DocumentWebLayoutPresenter.MeasureOverride(Size availableSize)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at MS.Internal.Helper.MeasureElementWithSingleChild(UIElement element, Size constraint)
at System.Windows.Controls.ContentPresenter.MeasureOverride(Size constraint)
at System.Windows.FrameworkElement.MeasureCore(Size availableSize)
at System.Windows.UIElement.Measure(Size availableSize)
at System.Windows.ContextLayoutManager.UpdateLayout()
at System.Windows.UIElement.UpdateLayout()
at Telerik.Windows.Documents.UI.DocumentPresenterBase.Telerik.Windows.Controls.IDocumentEditorPresenter.UpdateLayout()
at Telerik.Windows.Controls.RadRichTextBox.<>c__DisplayClass1e.<UpdateEditorLayout>b__1d()
at Telerik.Windows.Controls.RadRichTextBox.UpdateEditorLayout(Boolean focusCarret, Boolean updateCaretSize, Boolean async)
at Telerik.Windows.Controls.RadRichTextBox.UpdateEditorLayout(Boolean async)
at Telerik.Windows.Controls.RadRichTextBox.UpdateEditorLayout()
at Telerik.Windows.Controls.RichTextBoxUI.Dialogs.Styles.ObservableStyleCollection..ctor(RadDocument document, RadRichTextBox snapshotRichtextBox, Int32 snapshotWidth, Int32 snapshotHeight, Boolean addClearAllStyle, Boolean onlyPrimary)
at Telerik.Windows.Controls.RichTextBoxUI.StylesGallery.SetInitialQuickStyleItemSource(RadRichTextBox radRichTextBox)
at Telerik.Windows.Controls.RichTextBoxUI.StylesGallery.<>c__DisplayClass1.<SetQuickStyleItemSource>b__0()
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
Wie ktoś może jak taki błąd rozwiązać? Zapytałem na stackoverflow, ale tam by otrzymać odpowiedź to trzeba mieć szczęście zwycięzcy lotto.