Пример #1
0
        //ATTENZIONE: Function Ricorsiva
        ///<summary>
        ///  Ritorna sempre una lista, vuota in caso di errore o nel caso in cui nessun figlio corrisponde
        ///</summary>
        public static List <UIElement> DammiFigli(DependencyObject oggPadre, Type tipoDaCercare = null, string nomeDaCercare = "", Str.TipiRicerca tipoRicerca = Str.TipiRicerca.uguale,
                                                  bool piuDi1 = true, Mess logMess = null)
        {
            if (logMess == null)
            {
                logMess = new Mess(LogType.Warn, Log.main.warnUserText);
            }

            List <UIElement> listaFigli = new List <UIElement>();

            if (oggPadre == null)
            {
                logMess.testoDaLoggare = "Ricevuto parametro oggPadre a null";
                Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare)); //Qui deve essere sempre errore
                return(listaFigli);
            }

            string nomeOgg;

            foreach (object figlio in LogicalTreeHelper.GetChildren(oggPadre))
            { //ATTENZIONE: sembra che VisualTreeHelper.GetChild restituisce solo i figli visibili
                if (figlio == null || figlio.GetType().IsSubclassOf(typeof(DependencyObject)) == false)
                {
                    continue;                                                                                     //Sembra funzionare anche <Not TypeOf figlio Is DependencyObject>
                }
                if (nomeDaCercare != null && nomeDaCercare != "")
                {
                    if (figlio.GetType().GetProperty("Name") != null)
                    {
                        nomeOgg = (string)figlio.GetType().GetProperty("Name").GetValue(figlio, BindingFlags.GetProperty, null, null, null);

                        switch (tipoRicerca)
                        {
                        case Str.TipiRicerca.uguale:
                            if (nomeOgg == nomeDaCercare)
                            {
                                listaFigli.Add((UIElement)figlio);
                                if (piuDi1 == false)
                                {
                                    return(listaFigli);
                                }
                            }
                            break;

                        case Str.TipiRicerca.iniziaPer:
                            if (nomeOgg.Left(nomeDaCercare.Length) == nomeDaCercare.ToLower())
                            {
                                listaFigli.Add((UIElement)figlio);
                                if (piuDi1 == false)
                                {
                                    return(listaFigli);
                                }
                            }
                            break;

                        case Str.TipiRicerca.finiscePer:
                            if (nomeOgg.Right(nomeDaCercare.Length) == nomeDaCercare)
                            {
                                listaFigli.Add((UIElement)figlio);
                                if (piuDi1 == false)
                                {
                                    return(listaFigli);
                                }
                            }
                            break;

                        case Str.TipiRicerca.contiene:
                            if (nomeOgg.Contains(nomeDaCercare))
                            {
                                listaFigli.Add((UIElement)figlio);
                                if (piuDi1 == false)
                                {
                                    return(listaFigli);
                                }
                            }
                            break;

                        default:
                            logMess.testoDaLoggare = "Ricevuto valore disatteso per il parametro tipoRicerca:<" + tipoRicerca.ToString() + ">";
                            Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare));     //Qui deve essere sempre errore
                            return(listaFigli);
                        }
                    }
                }
                else if (tipoDaCercare != null)
                {
                    if (figlio.GetType() == tipoDaCercare)
                    {
                        listaFigli.Add((UIElement)figlio);
                        if (piuDi1 == false)
                        {
                            return(listaFigli);
                        }
                    }
                }
                else
                {                                                                                      //Non posso restituire tutti gli elementi
                    logMess.testoDaLoggare = "Criterio di ricerca disatteso, parametro nome vuoto e tipo a nothing";
                    Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare)); //Qui deve essere sempre errore
                    return(listaFigli);
                }

                foreach (UIElement figlioDelFiglio in DammiFigli((DependencyObject)figlio, tipoDaCercare, nomeDaCercare, tipoRicerca, piuDi1))
                {
                    listaFigli.Add(figlioDelFiglio);
                    if (piuDi1 == false)
                    {
                        return(listaFigli);
                    }
                }
            }
            return(listaFigli);
        }
Пример #2
0
        ///<summary>
        ///  Ritorna sempre una lista, vuota in caso di errore o nel caso in cui nessun figlio corrisponde
        ///</summary>
        public static List <UIElement> DammiPadri(DependencyObject oggFiglio, Type tipoDaCercare = null, string nomeDaCercare = "", Str.TipiRicerca tipoRicerca = Str.TipiRicerca.uguale,
                                                  bool piuDi1 = false, Mess logMess = null)
        {
            if (logMess == null)
            {
                logMess = new Mess(LogType.Warn, Log.main.warnUserText);
            }

            List <UIElement> listaPadri = new List <UIElement>();

            if (oggFiglio == null)
            {
                logMess.testoDaLoggare = "Ricevuto parametro oggFiglio a null";
                Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare)); //Qui deve essere sempre errore
                return(listaPadri);
            }

            string nomeOgg;

            DependencyObject padre = VisualTreeHelper.GetParent(oggFiglio);

            //In questo caso meglio usare VisualTreeHelper rispetto a LogicalTreeHelper poichè i controlli non hanno sempre un parent nelle proprietà

            if (padre == null)
            {
                return(listaPadri);
            }

            while (padre != null)
            {
                if (nomeDaCercare != null && nomeDaCercare != "" && padre.GetType().GetProperty("Name") != null)
                {
                    nomeOgg = (string)padre.GetType().GetProperty("Name").GetValue(padre, BindingFlags.GetProperty, null, null, null);

                    switch (tipoRicerca)
                    {
                    case Str.TipiRicerca.uguale:
                        if (nomeOgg == nomeDaCercare)
                        {
                            listaPadri.Add((UIElement)padre);
                            if (piuDi1 == false)
                            {
                                return(listaPadri);
                            }
                        }
                        break;

                    case Str.TipiRicerca.iniziaPer:
                        if (nomeOgg.Left(nomeDaCercare.Length) == nomeDaCercare.ToLower())
                        {
                            listaPadri.Add((UIElement)padre);
                            if (piuDi1 == false)
                            {
                                return(listaPadri);
                            }
                        }
                        break;

                    case Str.TipiRicerca.finiscePer:
                        if (nomeOgg.Right(nomeDaCercare.Length) == nomeDaCercare)
                        {
                            listaPadri.Add((UIElement)padre);
                            if (piuDi1 == false)
                            {
                                return(listaPadri);
                            }
                        }
                        break;

                    case Str.TipiRicerca.contiene:
                        if (nomeOgg.Contains(nomeDaCercare))
                        {
                            listaPadri.Add((UIElement)padre);
                            if (piuDi1 == false)
                            {
                                return(listaPadri);
                            }
                        }
                        break;

                    default:
                        logMess.testoDaLoggare = "Ricevuto valore disatteso per il parametro tipoRicerca:<" + tipoRicerca.ToString() + ">";
                        Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare));     //Qui deve essere sempre errore
                        return(listaPadri);
                    }
                }
                else if (tipoDaCercare != null)
                {
                    if (padre.GetType() == tipoDaCercare)
                    {
                        listaPadri.Add((UIElement)padre);
                        if (piuDi1 == false)
                        {
                            return(listaPadri);
                        }
                    }
                }
                else
                {                                                                                      //Non posso restituire tutti gli elementi
                    logMess.testoDaLoggare = "Criterio di ricerca disatteso, parametro nome vuoto e tipo a null";
                    Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, logMess.testoDaLoggare)); //Qui deve essere sempre errore
                    return(listaPadri);
                }

                padre = VisualTreeHelper.GetParent(padre);

                //padre = .GetParent(padre);
            }

            return(listaPadri);
        }