Pergunta

Temos um requisito bastante estranho: a visibilidade de qualquer controle em nossa aplicação WPF deve ser conduzida por uma tabela de banco de dados.

Isso significa que temos uma tabela que armazena o nome do elemento e sua visibilidade.

Agora estou procurando uma maneira elegante de implementar esse recurso no lado do cliente.

Eu poderia criar meu próprio UserControl e herdá -lo em todos os lugares, fornecendo um método de modelo InitializeComponent. Mas e se alguém programaticamente adicionar mais controladores de crianças?

Não quero que meus controles saibam sobre esse mecanismo. Quero conectar/interceptar em um determinado ponto (pré-controle) e ajustar a visibilidade do controle de acordo com o banco de dados.

Isso de alguma forma é possível? E se não, como você o criaria?

Foi útil?

Solução

Então aqui está o que eu fiz:

Eu herdei do UserControl e coloquei o cheque no EventHandler para o evento carregado.

Então deixei meus controles herdarem do meu Consontrol Custom, isso funciona muito bem.

A implementação findName () não encontrará os elementos da estrutura por algum motivo que eu não conheço, embora seus nomes sejam definidos no XAML. Então, aqui está a rotina que eu uso para encontrar as crianças por seus nomes:

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

Eu não gosto dessa solução, mas funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top