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
Popupa jménapopupa na stránku (Page) dejte tlačítko, které bude do tohoto popupu přidávat dynamicky další tlačítko pomocí vlastnostiChild. - Zaregistrujte handler
Clicktlačí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).