Pregunta

tenemos un requisito bastante extraño:. La visibilidad de cualquier control en nuestra WPF-aplicación está siendo impulsada por una base de datos de la tabla

Esto significa que tenemos una tabla que almacena el nombre del elemento y su visiblity de.

Ahora estoy buscando una manera elegante de implementar esta característica en el lado del cliente.

pude crear mi propio control de usuario y herede de ella en todas partes, proporcionando un método InitializeComponent plantilla. Pero lo que si alguien añade programación más childcontrols?

No quiero que mis controles para saber sobre este mecanismo en absoluto. Quiero enganchar en / intersección en un punto determinado (pre de control-rendering) y ajustar la visibilidad del control de acuerdo con la base de datos.

Es posible que de alguna manera? Y si no, ¿cómo diseñarlo?

¿Fue útil?

Solución

Así que aquí es lo que hice:

he heredado de control de usuario y poner el cheque en el un manejador de sucesos para el Evento Loaded.

luego dejar que mis controles heredan de mi CustomControl, esto funciona bastante bien.

El FindName () aplicación no encontrará las FrameworkElements por alguna razón no lo sé, aunque sus nombres se definen en el XAML. Así que aquí es el uso que de rutina para encontrar a los niños por sus nombres:

    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;
    }

No me gusta esta solución, pero funciona.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top