これが私の現在のシナリオです。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>
インデントで申し訳ありません。何らかの理由で、ここでコードを適切にインデントできません:(
私がする必要があるのは、決定することです(できれば、異なる UserControls のどれが現在表示さTabControl.Load
れているかをメソッドで確認します。動的な方法でこれを行う必要があります。TabItems とその子の間の関係をハードコードすることはできませ
ん。これは動的 UI であり、事前にどのコントロールがあるかを知る方法がないためです。if (TabControl.SelectedItem is XXXX)...
少し調べてみたところ、TabItem
コントロールが「子」のビジュアルツリーに表示されないことがわかりました。のみが表示され、ContentPresenter
次にTabControl
それ自体が表示されます。tabItems には独自のコンテンツが「含まれていない」ように見えるため、たとえば、FindAncestor
Tab Items に対して a を実行できませんでした。
もう 1 つの興味深い事実は、ユーザー コントロールのLoaded
イベントが起動時に呼び出されていることです。画面に表示されているかどうかに関係なく。
理想的なシナリオは、ユーザーコントロールが下にある TabItem が選択されたときにのみユーザーコントロールで発生するイベントを見つけることです。
どんなアイデアでも大歓迎です。前もって感謝します