TabItem в отдельном XAML

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

17
задан John Sheares 19 October 2009 в 17:31
поделиться

3 ответа

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

Предположим, что ваш исходный код был следующим:

<TabControl>
    <TabItem Header="Tab 1">
        <Grid>
            <TextBlock Text="Tab Data" />
        </Grid>
    </TabItem>
</TabControl>

Чтобы сделать код более управляемым, вы можете разбить содержимое вкладки на UserControl, например:

<UserControl x:Class="WpfApplication19.Tab1Data"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             >
    <Grid>
        <TextBlock Text="Tab Data" />
    </Grid>
</UserControl>

А затем использовать этот пользовательский элемент управления в TabControl следующим образом:

    <TabControl>
        <TabItem Header="Tab 1">
            <tabData:Tab1Data />
        </TabItem>
    </TabControl>

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

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

    <TabControl>
        <tabData:TabItem1 />
        <tabData:TabItem2 />
        <tabData:TabItem3 />
    </TabControl>

И каждый элемент управления пользователя TabItem1 будет иметь тип TabItem. Вот пример:

<TabItem x:Class="WpfApplication19.TabItem1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Header="Tab 1"
         >
    <Grid>
        <TextBlock Text="Tab Data" />
    </Grid>
</TabItem>

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

public partial class TabItem1 : TabItem
{
    public TabItem1()
    {
        InitializeComponent();
    }
}
32
ответ дан 30 November 2019 в 10:58
поделиться

На первый взгляд это звучит так, как будто лучше всего было бы решено с помощью стиля и / или шаблона для элемента управления TabItem, который вы можете сохранить в отдельном файле ресурсов. То, насколько вам нужно настроить фактический TabItem, определит, можете ли вы просто использовать стиль или вам нужен шаблон.

Что вы можете сделать, так это определить именованный стиль для каждого TabItem в отдельном файле ресурсов, например, создать MyResources.xaml выглядит примерно так:

<ResourceDictionary>
    <Style x:Key="MyTabItem" TargetType="{x:Type TabItem}">
      <!-- 
           you can just use simple property setters to set up 
           the TabItem or set the Template property to replace
           entire tab look and feel
      -->
    </Style>
</ResourceDictionary>

Затем в вашем основном файле App.xaml вы объединяете в словарь ресурсов:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="MyResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Наконец, в своем приложении вы можете использовать эти стили, просто выполнив:

<TabItem Style="{DynamicResource MyTabItem}" />
2
ответ дан 30 November 2019 в 10:58
поделиться

Я думаю, что вы хотели, чтобы содержимое TabItem объявлялось отдельно. Поскольку TabItem является ContentControl, вы можете представить UserControl как его содержимое.

<TabControl>
   <TabItem> 
       <local:YourTabContent1/>
   </TabItem>
   <TabItem> 
       <local:YourTabContent2/>
   </TabItem>
</TabControl>

В отдельном XAML:

<UserControl x:Class="MyProject.YourTabContent1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <......blah blah.../>
</UserControl>

В другом XAML может быть контент 2

<UserControl x:Class="MyProject.YourTabContent2"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <......blah blah.../>
</UserControl>
1
ответ дан 30 November 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: