Динамически созданные элементы управления Silverlight не отображаются - PullRequest
1 голос
/ 19 мая 2009

Я динамически добавляю пользовательские элементы управления в Silverlight 2, но они не отображаются. Однако, изучая визуальное дерево в Silverlight Spy, я замечаю, что их свойство видимости Visible, а переключение его в Collapsed и обратно в Visible делает элементы управления видимыми.

Что я могу делать не так? Любые идеи о том, что я должен искать, чтобы решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 19 мая 2009

UpdateLayout () в ParentControl не должен быть необходим.

Но не забудьте my_parent_control.Add (UIElement mynewcontrol);

т.е. my_parent_control может быть панелью стека.

1 голос
/ 21 мая 2009

Мне удалось решить проблему, которая возникла, когда я динамически добавлял периоды времени к временной шкале.

Элементы управления, которые я динамически добавляю на холст, имеют следующую структуру.

<Path x:Name="ribbonItem" Fill="Green">
  <Path.Data>
    <GeometryGroup>
      <RectangleGeometry x:Name="ribbonItemBackground" />
    </GeometryGroup>
  </Path.Data>
</Path>

Размеры RectangleGeometry зависят от трех входных данных, диапазонов даты и времени на панели временной шкалы и элементе временной шкалы (что я добавляю) и размеров панели (холста).

Следующий метод вызывается, когда установлены какие-либо свойства объекта BarRange, ItemRange или BarSize.

private void Resize()
{
if (_itemRange != null && _barRange != null && _barSize != Size.Empty)
  {
    ribbonItemBackground.Rect = ItemRectangle();
  }
}

Это вызвало проблему рисования, упомянутую в моем вопросе, и решением было добавить

ribbonItem.InvalidateMeasure();

сразу после установки лентыItemBackground.Rect.

1 голос
/ 19 мая 2009

Вы пытались вызвать UpdateLayout () для элемента управления, к которому вы добавляете их?

1 голос
/ 19 мая 2009

Первое, что приходит на ум, - это какой объект контейнера вы используете для создания динамических элементов управления, если таковые имеются?

Я мог видеть, как добавление элементов управления без использования контейнера может вызвать некоторые проблемы. Я не могу сказать, что я создал много объектов управления динамически, но я думаю, что добавление ваших элементов в панель стека будет самой простой реализацией.

Хорошим тестовым примером может быть создание сетки и назначение местоположений сетки для элементов управления при их создании.

Вот ссылка о том, как это сделать.

...