Динамически созданные элементы управления Silverlight не видны
-
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() для элемента управления, к которому вы их добавляете?
Первое, что приходит на ум, это какой тип объекта-контейнера вы используете для создания динамических элементов управления, если таковые имеются?
Я мог бы понять, как, возможно, добавление элементов управления без использования контейнера может вызвать у вас некоторые проблемы.Я не могу сказать, что создал много объектов управления динамически, но я бы подумал, что добавление ваших элементов на панель стека было бы самой простой реализацией.
Хорошим тестовым примером может быть создание сетки и назначение местоположений сетки для ваших элементов управления по мере их создания.
Вот такой Ссылка о том, как сделать именно это.