Добавление элементов управления в Stackpanel во время выполнения (SL 4.0)

У меня есть пользовательский элемент управления, который содержит панель стека.

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

Кто-нибудь знает, как это сделать?


person Cos    schedule 07.04.2011    source источник


Ответы (1)


Если вы используете DataBinding, включите привязку, переопределяющую панель стека с помощью itemsControl. Затем вы можете работать со свойством коллекции с именем ItemsProperty.

<StackPanel>
   <ItemsControl x:Name="itemsControl" ItemsSource="{Binding ItemsProperty, Mode=TwoWay}" >
          <ItemsControl.ItemTemplate>
              <DataTemplate>
                 <ContentPresenter Content="{Binding}" /> <!-- you could also use Border -->
              </DataTemplate>
         </ItemsControl.ItemTemplate>
    </ItemsControl>
</StackPanel>

Если вы находитесь в отделенном коде, вам не нужно переопределять ItemsControl, просто вызовите stackpanel1.Children.Add(item); (если x:Name="stackpanel1" в XAML).

Затем в stackPanel1.Children должны быть элементы.

person AlignedDev    schedule 07.04.2011
comment
Я вызвал stackpanel.childern.add(item), но добавленные элементы не отображаются в элементе управления - person Cos; 08.04.2011
comment
Вы используете Binding или codebehind? Я отредактировал свой ответ, чтобы, надеюсь, сделать его более понятным. Если вы добавите фрагмент кода, я смогу дать вам более точный ответ. - person AlignedDev; 08.04.2011
comment
usercontrolA.xaml: ‹Stackpanel Margin=78,0,16,16 Height=469 x:Name=ChartArea/›. usercontrolA.xaml.cs: общедоступная диаграмма FrameworkElement { set { ChartArea.children.add (значение); } } в usercontrolB.xaml.cs: ((usercontrolA).Chart = new ListBox(); - person Cos; 08.04.2011
comment
Попробуйте создать свойство в userControlA общедоступных диаграмм ObservableCollection‹FrameworkElement› (вместо вашего свойства Chart). Затем в userControlB.xaml.cs: userControlA.Charts.Add(new ListBox());. Затем используйте идею ItemsControl и привяжите к свойству Charts. - person AlignedDev; 08.04.2011
comment
Спасибо! Я следил за вашим gude, и предметы добавляются! К сожалению, хотя они не отображаются (появляются) на элементе управления - person Cos; 08.04.2011
comment
Прогресс хороший :-). Теперь, я думаю, вам нужно присмотреться к DataTemplate. Я отредактировал его (в своем ответе), чтобы лучше отразить вашу ситуацию. - person AlignedDev; 08.04.2011