Jak opravit výjimku „Value does not fall within the expected range“ při přidávání potomka do Controlu který již byl použit

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:

  1. 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.
  2. Zaregistrujte handler Click tlačítku v Popupu a do jeho obsahu dejte tento kód:
    C#
    popup.IsOpen = false;
    VisualTreeHelper.DisconnectChildrenRecursive(popup);
  3. 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).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *