2015-08-18 2 views
1

У меня есть UserControl, который содержит TabControl.
TabControl будет иметь от 1 до n TabItems, то есть: первый TabItem всегда будет там, и его содержимое будет одинаковым для каждого экземпляра моего UserControl, но остальные элементы TabItems должны появиться из моего кода потому что сначала я должен их сконструировать в зависимости от некоторых свойств.TabControl: первый TabItem статический, отдых от кода

Моя первая попытка состояла из

<UserControl x:Class="MyNS.MyControl" 
      xmlns:local="MyNS" 
      and the whole rest of the declarations> 
    <Grid> 
    <TabControl> 
     <TabControl.ItemsSource> 
     <Binding Path="Tabs" RelativeSource="{RelativeSource AncestorType=local:MyControl}" /> 
     </TabControl.ItemsSource> 
    <TabControl/> 
    </Grid> 
</UserControl> 

где Tabs является declarated, как public IList Tabs { get { return ... } } в отделенного кода. Это не зависимость или прикрепленное свойство. Это просто поле.
Это прекрасно работает. Будет показано, что я построю в коде.

Однако, когда я хочу, чтобы определить первый TabItem вручную я столкнуться с проблемами:

<UserControl x:Class="MyNS.MyControl" 
      xmlns:local="MyNS" 
      and the whole rest of the declarations> 
    <Grid> 
    <TabControl> 
     <TabControl.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer> 
      <CollectionContainer.Collection> 
       <x:Array Type="TabItem"> 
       <TabItem Header="Test"/> 
       </x:Array> 
      </CollectionContainer.Collection> 
      </CollectionContainer> 
      <CollectionContainer>       
      <CollectionContainer.Collection> 
       <Binding Path="Tabs" 
         RelativeSource="{RelativeSource AncestorType={x:Type local:MyControl}}"/> 
      </CollectionContainer.Collection>       
      </CollectionContainer>    
     </CompositeCollection> 
     </TabControl.ItemsSource> 
    <TabControl/> 
    </Grid> 
</UserControl> 

всегда отображается первый (статический) элемент, но кажется, что связывание не может решить мою поглотитель для Tabs больше.

Как я могу определить первый элемент вкладки вручную (в XAML) и извлечь остальные из кода?

ответ

0

использование {x:Reference}:

<UserControl x:Class="MyNS.MyControl" 
     xmlns:local="MyNS" 
     x:Name="MyControl"> 

<!-- ... ---> 

<CollectionContainer Collection="{Binding Tabs, Source={x:Reference MyControl}}"/> 
+0

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

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