Динамически созданные элементы управления Silverlight не видны

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

  •  22-08-2019
  •  | 
  •  

Вопрос

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

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

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

Решение 3

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

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

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

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

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

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

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

ribbonItem.InvalidateMeasure();

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

Другие советы

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

Но не забывайте my_parent_control.Добавить (UIElement mynewcontrol);

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

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

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

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

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

Вот такой Ссылка о том, как сделать именно это.

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