2

これが私の現在のシナリオです。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 には独自のコンテンツが「含まれていない」ように見えるため、たとえば、FindAncestorTab Items に対して a を実行できませんでした。

もう 1 つの興味深い事実は、ユーザー コントロールのLoadedイベントが起動時に呼び出されていることです。画面に表示されているかどうかに関係なく。

理想的なシナリオは、ユーザーコントロールが下にある TabItem が選択されたときにのみユーザーコントロールで発生するイベントを見つけることです。

どんなアイデアでも大歓迎です。前もって感謝します

4

1 に答える 1

1

この場合、返されたオブジェクトを提供し、指定されたタイプを探すために、SOVisualTreeHelperで結果としてこの回答を活用できるはずです。TabItem.ContentUserControl

:

詳細については、SO の質問で発生したコメントを参照してください。

于 2011-03-16T19:24:03.653 に答える