В XAML (WPF), почему WrapPanel может быть помещен непосредственно в FrameworkElementFactory? - PullRequest
0 голосов
/ 21 октября 2018

В WPF панель элементов ItemsControl, например ListBox, может быть заменена на элементы макета другим способом.например:

<ListBox>
<ListBox.ItemsPanel>
  <ItemsPanelTemplate>
    <WrapPanel/>
  </ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

Код выше работает.Но почему WrapPanel можно поместить внутрь ItemsPanelTemplate напрямую?ItemsPanelTemplate имеет свойство VisualTree, которое унаследовано от класса FrameworkTemplate.Свойство VisualTree является свойством содержимого и имеет тип FrameworkElementFactory.Таким образом, приведенный выше код на самом деле:

<ListBox>
<ListBox.ItemsPanel>
  <ItemsPanelTemplate>
    <ItemsPanelTemplate.VisualTree>
       <FrameworkElementFactory>
         <WrapPanel/>
       </FrameworkElementFactory>
    </ItemsPanelTemplate.VisualTree>
  </ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

Теперь возникает вопрос: FrameworkElementFactory не имеет свойства содержимого и даже не имеет свойств типа Panel, так почему же WrapPanel можно поместить внутрь FrameworkElementFactory напрямую?

...