controles do Silverlight criados dinamicamente não visível
-
22-08-2019 - |
Pergunta
Estou adicionando dinamicamente controles personalizados no Silverlight 2, mas eles não são visíveis. No entanto, ao examinar a árvore visual no Silverlight Spy I nota que a sua propriedade visibilidade é visível e alternando-lo para um colapso e volta para causas visíveis os controles para se tornar visível.
O que eu poderia estar fazendo de errado? Algumas ideias sobre o que eu deveria procurar resolver isso?
Solução 3
Eu tenho sido capaz de resolver o problema, que ocorreu quando eu estava dinamicamente adicionando períodos de tempo para uma linha do tempo.
Os controles eu estou adicionando dinamicamente, para uma tela, tem a seguinte estrutura.
<Path x:Name="ribbonItem" Fill="Green">
<Path.Data>
<GeometryGroup>
<RectangleGeometry x:Name="ribbonItemBackground" />
</GeometryGroup>
</Path.Data>
</Path>
As dimensões do RectangleGeometry dependem de três entradas, a data e hora intervalos da barra de cronograma e item de linha de tempo (o que eu estou adicionando) e as dimensões do bar (tela).
O seguinte método é chamado, quando qualquer uma das propriedades BarRange, ItemRange ou BarSize do objecto são conjunto.
private void Resize()
{
if (_itemRange != null && _barRange != null && _barSize != Size.Empty)
{
ribbonItemBackground.Rect = ItemRectangle();
}
}
Isso fez com que o problema de desenho mencionado na minha pergunta e a solução foi adicionar
ribbonItem.InvalidateMeasure();
imediatamente após a definição ribbonItemBackground.Rect.
Outras dicas
UpdateLayout () no ParentControl shoudn't ser necessário.
Mas não se esqueça my_parent_control.Add (UIElement mynewcontrol);
i. my_parent_control poderia ser um painel de pilha.
Você já tentou chamar UpdateLayout () no controle você está adicionando-os a?
A primeira coisa que vem à mente é que tipo de objeto de recipiente que você está usando para criar os controles dinâmicos, se houver?
Eu podia ver como talvez adicionando controles sem usar um recipiente pode dar-lhe alguns problemas. Eu não posso dizer que eu criei muitos objetos de controle dinamicamente, mas eu acho que a adição de seus itens a um painel de pilha seria a implementação mais fácil.
Um bom caso de teste pode ser a criação de uma grade e locais de grade atribuir para seus controles como você criá-los.
Aqui está um ligação sobre como fazer isto.