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?

Foi útil?

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.

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