2010-09-16 3 views
19

Я полностью смущен этими тремя терминами, когда использовать их? Каковы отношения, и они дети, из которых контролируются?ItemsControl, ItemsPanel и ItemsPresenter (Silverlight, XAML)

Правильно ли сказать, что это дерево:

ItemsControl> ItemsPresenter> ItemsPanel

ответ

32

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

ItemsPresenter немного сложнее объяснить, но это часть шаблона ItemsControl, который определяет, где элементы размещены внутри него. Ваш шаблон ItemsControl может быть любым, например Grid с некоторыми хорошими картинками вокруг него, внутри этого шаблона, вы должны разместить ItemsPresenter, где бы вы ни захотели, чтобы ваши объекты были, скажем, прямо посередине вашей сетки. (Этот пример взят из msdn и упрощен для удобства чтения)

<Style TargetType="HeaderedItemsControl"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type HeaderedItemsControl}"> 
      <Grid> 
      <Rectangle Stroke="Black" Fill="Red"/> 
      <ItemsPresenter Margin="2,0,0,0"/> 
      </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

ItemsPanel является панелью (или контейнер), который контролирует расположение элементов в вашем ItemsControl. Поэтому, если вы хотите, чтобы ваши элементы, которые вы добавили в свой ItemsControl, отображались горизонтальным образом, тогда панель элементов yor может быть просто StackPanel с свойством Orientation, установленным в Horizontal.

Это все имеет смысл?

+0

Если бы вы могли дать пример всех 3 в использовании .. будет большим. Пример msdn, с которым я сталкивался раньше, не так уж хорош (т. Е. Он чертовски сосет). Итак, я думаю, что itemspresenter меняет ControlTemplate, который может содержать ItemPanel для хранения большего количества элементов в ControlTemplate? – bcm

+0

- это концептуальный вопрос или у вас возникли проблемы с попыткой создать свой собственный элемент ItemsControl? – Mark

+0

концептуально, но просто хотел бы это понять. – bcm

5

Я думаю, что это в значительной степени объясняет, как все делается с помощью Silverlight: ItemsPanelTemplate Класс: Определяет панель, что ItemsPresenter создает для расположения пунктов в ItemsControl. ItemsPanelTemplate Class

<Style TargetType="local:myItemsControl"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:myItemsControl"> 
       .... 
       <ItemsPresenter /> 
       .... 

В основном, ItemPresenter (указано в шаблоне) будут заменены на то, что указано в ItemsPanelTemplate.

Итак, шаблон может быть расширена, чтобы включить заголовок и все ребенок будет находиться под этим заголовком:

<Grid> <TextBlock Text="Header"/> <ItemsPresenter /> </Grid> 

 Смежные вопросы

  • Нет связанных вопросов^_^