Je to velmi jednoduché, prošel jsem si několik vláken na různých forech a na žádném jsem nenašel kód, a vzhledem k tomu že tato chyba je velmi častá, jsem se rozhodl napsat na svůj blog workaround, který se vztahuje na WPF a Windows Store aplikace, pravděpodobně pak i na Silverlight a Windows Phone. Pro ověření udělejte tyto věci:
- Vytvořte globální proměnnou typu Popup a jména popup a na stránku(Page) dejte tlačítko, které bude do tohoto popupu přidávat dynamicky další tlačítko pomocí vlastnosti Child.
- Zaregistrujte handler Click tlačítku v Popupu a do jeho obsahu dejte tento kód:
C#
popup.IsOpen = false; VisualTreeHelper.DisconnectChildrenRecursive(popup); - Zakomentujte v tom mém kódu druhý řádek a zkuste spustit. Při druhém zobrazení popupu se vám vyhodí výjimka System.ArgumentException. Odkomentujte druhý řádek a mělo by vám to fungovat. Já ještě navíc přidávám ke každému prvku(jak k popupu tak k jeho potomku inkrementující se ID s názvem třídy, takže kdyby vám to nefungovalo, udělejte to taky – pro jistotu).