Это мой текущий сценарий: у меня есть несколько 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, в котором они находятся.
Цените любые идеи.Заранее спасибо