这是我当前的场景:我在 WPF 窗口中的单个 TabControl 上的不同 TabItems 中有几个 UserControls。就像是:
<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
方法中,我的哪些不同的 UserControls 当前是可见的。我需要以动态方式执行此操作,我无法硬编码 TabItems 与其子项之间的关系,例如:
if (TabControl.SelectedItem is XXXX)...
不是在这里可能,因为这是一个动态 UI,我无法知道前面有哪些控件。
我一直在挖掘一点,发现TabItem
控件没有出现在他们的“孩子”的视觉树中。我只看到 a ContentPresenter
,然后是TabControl
本身。看起来 tabItems 不“包含”它们自己的内容,所以我不能,例如,FindAncestor
对 Tab Items 做一个。
另一个有趣的事实是Loaded
我的用户控件事件在启动时被调用。无论它们是否在屏幕上可见。
一个理想的方案是找到一个仅在我的用户控件上触发的事件,当它们所在的 TabItem 被选中时。
欣赏任何想法。提前致谢