2013-05-31 2 views
0

Я хотел бы сделать TabControl, который содержит TabItems. Внутри TabItem у меня будет StackPanel, который содержит различные элементы управления (ListBox, TextBox, Grid и т. Д.). Как создать шаблон каждого TabItem и сделать несколько из них?Как сделать шаблон TabItem, который содержит те же элементы управления

Например, скажем, я хотел бы сделать TabControl, который содержит вкладки для категории Food (Meat, Fruit, Vege и т. Д.). Я мог бы сделать их индивидуально, создав TabItems с именем и заголовком. Но вместо этого я хотел бы просто сделать так, как показано ниже, и использовать его в качестве шаблона, поскольку вкладка может увеличиться.

<TabControl x:Name="TabControl" Margin="3,3,3,3" MinWidth="200"> 
    <TabItem Name="FoodCategory1"> 
     <!-- Contents of this does not really matter but its same thing for each "FoodCategory" --> 
     <StackPanel> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition MinWidth="20"></ColumnDefinition> 
        <ColumnDefinition Width="Auto"></ColumnDefinition> 
        <ColumnDefinition Width="Auto"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <TextBox x:Name="InputBox" Grid.Column="0" Margin="5,5,5,5"></TextBox> 
       <Button x:Name="AddButton" Grid.Column="1" HorizontalAlignment="Right" Margin="0,0,5,0" Width="20" Height="20"></Button> 
       <Button x:Name="RemoveButton" Grid.Column="2" HorizontalAlignment="Right" Margin="0,0,5,0" Width="20" Height="20"></Button> 
      </Grid> 

      <ListBox x:Name="FoodList" Margin="3,3,3,3" MinHeight="40"></ListBox> 
     </StackPanel> 
     <!-- example end --> 
    </TabItem> 
</TabControl> 

И, конечно, от моего кода назад, я хотел бы получить доступ каждого отдельного tabitems контента по FoodCategoryX.InputBox и так далее. Как мне подойти к этому?

Любая помощь будет оценена по достоинству.

спасибо.

ответ

1

Основываясь на том, что вы написали, вы должны написать либо UserControl, либо CustomControl, который действует как контейнер и предоставляет визуальные эффекты, которые вы используете. Простейшим из этих двух, вероятно, является UserControl. Затем вы заполняете каждую из ваших TabItems экземпляром вашего элемента управления и это позволяет вам обращаться к TabItems по имени.

Для вашего другого вопроса об обращении к различным дочерним элементам управления по имени это достижимо, но более надежным подходом было бы использовать функции привязки WPF, подвергая свойства зависимостям. Написание UserControl - прямолинейное усилие, и есть рабочий пример here

+0

В течение самого долгого времени я не мог понять, как сделать UserControl, но я понял, что то, что я делаю, было UserControl. Оттуда все собралось вместе. Спасибо. –

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