Domanda

abbiamo un requisito piuttosto strana:. La visibilità di qualsiasi controllo nel nostro WPF-domanda debba essere guidato da un database tabella

Ciò significa che dobbiamo una tabella che memorizza il nome dell'elemento e la sua visiblity.

Ora Cerco un modo elegante per implementare questa funzione sul lato client.

ho potuto creare il mio UserControl ed ereditare da essa tutto il mondo, fornendo un Template Method InitializeComponent. Ma cosa succede se qualcuno aggiunge a livello di codice più childcontrols?

Non voglio i miei controlli per sapere di questo meccanismo a tutti. Voglio agganciare in / intercetta ad un certo punto (pre-controllo di rendering) e regolare la visibilità del controllo secondo il database.

E 'che in qualche modo possibile? E se no, come ti progettarlo?

È stato utile?

Soluzione

Così qui è quello che ho fatto:

ho ereditato da UserControl e mettere la spunta nella un EventHandler per l'evento Loaded.

Ho poi lasciare che i miei controlli ereditano dalla mia CustomControl, questo funziona piuttosto bene.

Il FindName () implementazione non troverà le FrameworkElements per qualche motivo non lo so, anche se i loro nomi sono definiti nel XAML. Così qui è l'uso di routine che per trovare i bambini con i loro nomi:

    public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            string controlName = child.GetValue(Control.NameProperty) as string;

            if (controlName == name)
            {
                return child as T;
            }
            else
            {
                T result = FindVisualChildByName<T>(child, name);
                if (result != null)
                {
                    return result;
                }
            }
        }

        return null;
    }

Non mi piace questa soluzione ma funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top