Как программно добавить элементы в PanoramaItem в WP7 - PullRequest
5 голосов
/ 29 января 2011

Я занимаюсь разработкой приложения с динамическим числом PanoramaItems, и в настоящее время все они добавляются путем добавления их списка в Panorama с использованием его свойства ItemsSource.

Но проблема возникает, когдаЯ пытаюсь добавить вещи в созданные PanoramaItems.Теперь я могу добавить ListBox, и он работает, как и ожидалось, но я действительно хотел бы добавить что-то, над чем у меня есть немного больше контроля (возможно, некоторый тип пользовательского элемента управления).

Теперь я имеюЯ нашел несколько мест, которые показывают мне, как это сделать, отредактировав MainPage.xaml, но так как я не знаю, сколько из них мне нужно, я не могу (я думаю) сделать это так.

Проблема дополняется тем фактом, что у класса PanoramaItem нет свойства «Items», а только «Content» (что, как мне кажется, мне нужно).

Я думаю, что мне нужно определить.xaml / .cs файл для пользовательского элемента управления, а затем каким-то образом применить его к PanoramaItem, но я действительно не уверен

Ответы [ 2 ]

3 голосов
/ 30 января 2011

Я собираюсь предположить, что здесь вы используете MVVM-фреймворк, так что если нет, то я прошу прощения.

Вы правы, думая, что вы, вероятно, захотите использовать пользовательский элемент управления для элементов Pano. Как только вы это сделаете, вот новый код XAML:

<controls:Panorama ItemsSource="{Binding PanoViewModels}">
     <controls:Panorama.ItemTemplate>
          <DataTemplate>
               <ctl:PanoItemControl />
          </DataTemplate>
     </controls:Panorama.ItemTemplate>
</controls:Panorama>

очевидно, что это упрощено, но следует изложить идею. В вашем контроле вы можете привязать непосредственно к объектам, содержащимся в PanoViewModels.

2 голосов
/ 30 января 2011

Если вы используете MVVM и привязку данных, ответ Баррангера Ридлера выглядит хорошо.

Если вы хотите написать собственный код C # для каждого дочернего элемента, то вам необходимо поместить контейнер (например, Grid или StackPanel) в Content каждого PanoramaItem - и затем вы можете добавить его в дочерние элементы этого контейнера. У меня нет кода на C #, но вот код Ironruby - он добавляет 5 TextBlocks в StackPanel, а затем устанавливает этот StackPanel в качестве содержимого PanoramaItem - его довольно легко переносить.

stack_panel = StackPanel.new

for i in 1..5
  t = TextBlock.new
  t.font_size = i*24 
  t.text = "Line " << i.to_s
  s.children.add t
end

pi = PanoramaItem.new
pi.header = "Title"
pi.content = stack_panel

panorama.items.add pi

на основе кода http://script.iron7.com/#/Script/Detail?scriptId=ed9e4e216a474432a9e88523b201965d&userLowerCaseName=stuart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...