Ceci est mon scénario actuel: J'ai plusieurs UserControls dans différents TabItems sur un seul TabControl dans une fenêtre WPF. Quelque chose comme:WPF TabControl Enfants
<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>
Désolé pour l'indentation. Pour une raison quelconque, je ne peux pas obtenir le code correctement indenté ici :(
Ce que je dois faire est de déterminer (de préférence dans la méthode TabControl.Load
, qui de mes différentes UserControls sont actuellement visibles. Je dois faire de manière dynamique, je ne peux pas coder en dur la relation entre les TabItems et leurs enfants, quelque chose comme: if (TabControl.SelectedItem is XXXX)...
n'est pas possible ici, car il s'agit d'une interface dynamique et je n'ai aucun moyen de savoir quelles commandes sont là avant:
J'ai creusé un peu et découvert que les contrôles TabItem
n'apparaissent pas dans l'arborescence visuelle de leurs "enfants". Je ne vois qu'un ContentPresenter
, puis le TabControl
lui-même. Il semble que les tabItems ne "contiennent" pas leur propre contenu, donc je ne pouvais pas, par exemple, faire un FindAncestor
aux éléments de l'onglet.
Un autre fait intéressant est que l'événement Loaded
de mes commandes usercontrols est appelé au démarrage. Peu importe si elles sont visibles à l'écran ou non.
Un scénario idéal consistera à trouver un événement qui est déclenché uniquement sur mes commandes Userc quand l'onglet dans lequel elles se trouvent est sélectionné.
Appréciez toutes les idées. Merci à l'avance
Est-ce que vous assimilez avec actuellement visible à un TabItem donné étant sélectionné? Si oui, dynamique ou non, vous pouvez obtenir ce dont vous avez besoin en fonction de l'onglet sélectionné. –
J'ai essayé, mais comme les TabItems n'apparaissent pas dans l'arborescence Visual des contrôles utilisateur, je n'arrive pas à trouver un moyen de savoir si l'élément Tab actuellement sélectionné est celui auquel appartiennent mes UserControls. Par conséquent, je ne peux pas déterminer quels contrôles usuels je dois provisionner (en effectuant des requêtes sur le Business Layer pour amener les données dans l'écran.) –
@HighCore Sont les conteneurs TabItems pour les UserControls où le UserControl est stocké dans la propriété Content du TabItem ? –