WPF: контроль видимость от базы данных / крюк пререндера

StackOverflow https://stackoverflow.com/questions/3414240

Вопрос

У нас довольно странное требование: видимость любого контроля в нашем WPF-приложении должно быть управляется таблицей базы данных.

Это означает, что у нас есть таблица, которая хранит имя элемента и его видимость.

Теперь я ищу элегантный способ реализации этой функции на стороне клиента.

Я мог бы создать свой собственный usercontrol и наследую от нее везде, обеспечивая метод инициализированного метода шаблона. Но что, если кто-то программно добавляет больше детей?

Я не хочу, чтобы мои контроли были знать об этом механизме вообще. Я хочу подключить / перехватить в определенной точке (предварительно управляемость) и отрегулировать видимость управления в соответствии с базой данных.

Это как-то возможно? А если нет, как бы вы это спроектировали?

Это было полезно?

Решение

Так вот что я сделал:

Я унаследовал от Usercontrol и поместите проверку в EventHandler для загруженного события.

Затем я позволю моим контролям наследует от моего CustomControl, это работает довольно хорошо.

Реализация FindName () не найдет каркасы по какой-то причине, я не знаю, хотя их имена определяются в XAML. Итак, вот рутина, которую я использую, чтобы найти детей по своим именам:

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

Мне не нравится это решение, но это работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top