WPF TabControl Children - PullRequest
       35

WPF TabControl Children

2 голосов
/ 16 марта 2011

Это мой текущий сценарий: у меня есть несколько UserControls внутри разных TabItems на одном TabControl в окне WPF.Что-то вроде:

<Window x:Class="MainWindow"  
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
Title="S.C.A.R" WindowState="Maximized">  
    <TabControl Name="MainTabControl">  
        <TabItem Name="TabOps">  
            <Grid>  
                <Grid.RowDefinitions>  
                    <RowDefinition/>  
                    <RowDefinition/>  
                    <RowDefinition/>  
                    <RowDefinition Height="20"/>  
                </Grid.RowDefinitions>  
                <Grid.ColumnDefinitions>  
                    <ColumnDefinition/>  
                    <ColumnDefinition Width="30"/>  
                    <ColumnDefinition/>  
                </Grid.ColumnDefinitions>  
                <Local:ServiceList Height="Auto" CanInsert="True" CanCollapse="True" Grid.ColumnSpan="3" x:Name="SL" RecordState="Edit"/>  
                <Local:ReservationList CanCollapse="True" Grid.Row="1"  RecordState="Edit" x:Name="RL"/>  
                <Local:DriverList CanDelete="False" CanInsert="False"   CanCollapse="True" Grid.Row="1" Grid.Column="2" RecordState="Edit" x:Name="DL"/>  
                <Local:CustomerForm CanDelete="False" CanInsert="False" Grid.Row="2"   Grid.ColumnSpan="3" RecordState="View" x:Name="CL"/>  
                </Grid>  
        </TabItem>  
        <TabItemItem Name="TabCodes">  
                <Local:CustomerList x:Name="CustomerCRUD" RecordState="View"/>  
         </TabItem>  
        <Button Grid.Row="1"  Content="TEST" Click="Button_Click"/>  
    </Grid>  
</Border>  
</Window>  

Извините за отступ.По какой-то причине я не могу получить правильный код здесь: (

Что мне нужно сделать, это определить (предпочтительно в TabControl.Load Method, , какой из моих различных пользовательских контроллеров в настоящее время виден *)1008 *. Мне нужно сделать это динамически, я не могу жестко закодировать отношения между TabItems и их дочерними элементами, что-то вроде: if (TabControl.SelectedItem is XXXX)... здесь невозможно, потому что это динамический интерфейс, и у меня нет способа узнать, какойэлементы управления находятся впереди.

Я немного покопался и обнаружил, что элементы управления TabItem не отображаются в дереве визуалов их "потомков". Я вижу только ContentPresenter,а затем сам * 1014. * Похоже, что tabItems не "содержат" своего собственного содержимого, поэтому я не мог, например, сделать FindAncestor для элементов Tab.

Еще один интересный фактчто Loaded событие моего usercontrols вызывается при запуске. Независимо от того, видны они или нет на экране.

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

Цените любые идеи.Заранее спасибо

1 Ответ

1 голос
/ 16 марта 2011

Вы должны иметь возможность использовать VisualTreeHelper и, следовательно, этот ответ на SO, чтобы предоставить возвращаемый объект TabItem.Content и искать указанный вами тип, UserControl в данном случае.

Примечание

Дополнительные сведения см. В комментариях к вопросу SO.

...