Скрыть объекты / пользовательские элементы управления в WrapPanel? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть WrapPanel, который будет содержать несколько различных пользовательских UserControls. В зависимости от сценария мне может понадобиться отфильтровать, какие UserControls видны. Моя цель состоит в том, чтобы я мог переключать элементы управления, которые видны на лету, показывая / скрывая элементы управления, которые необходимо отфильтровать, смещая оставшиеся элементы управления в верхнем левом углу панели.

Сейчас я просто устанавливаю свойство Visibility элемента управления на Visibility.Collapsed, когда я не хочу, чтобы они появлялись. Я думал, что, поскольку я использовал WrapPanel, остальные элементы управления переместятся в верхний левый угол панели.

Вместо этого, после сокрытия некоторых из UserControls элементы управления, которые все еще видимы , остаются точно такими же, какими они были раньше, и у меня остаются пробелы между элементами управления, которые все еще отображаются. Я открыл свое приложение в Silverlight Spy , и оно показывает, что UserControls все еще там (что имеет смысл), но просто невидимы.

Итак, мой вопрос: Есть ли способ, которым я могу показать / скрыть UserControls в пределах WrapPanel, который позволяет все еще видимым UserControls скользить в их новые позиции (все смещаются в верхнем левом углу - аналогично StackPanel)

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

Если у кого-нибудь есть какие-либо предложения или советы, это будет с благодарностью. Спасибо!

-Lloyd

ОБНОВЛЕНИЕ:

XAML: (очень просто)

<toolkit:WrapPanel x:Name="MyLayout" Height="300" HorizontalAlignment="Left" VerticalAlignment="Top" Width="400" />

Code-Behind: UserControls добавляются динамически:

MyLayout.Children.Add(oUserControl)

И они также динамически разваливаются:

oUserControl.Visibility = Visibility.Collapsed

1 Ответ

0 голосов
/ 06 марта 2012

Я думаю, что нашел проблему.Мы недавно добавили WrapPanel к ScrollViewer и , когда я вынул ScrollViewer Я смог достичь желаемой функциональности.

Я не уверен, почему ScrollViewer будет иметь такой эффект?

Кроме того, я обнаружил, что могу оставить ScrollViewer на месте и просто вызвать .Measure() на WrapPanel, чтобы обновитьмакет.

Ни один из вариантов не имеет для меня 100% смысла, но оба они, похоже, работают.

...