2016-04-11 9 views
0

ich einen Templat-tabcontrol mit Templat-Datagrids in jedem Register haben, wie folgt aus:WPF Zugang Datagrid in Tabs

<TabControl> 
    <TabControl.ItemTemplate > 
     <DataTemplate> 
     .... 
     </DataTemplate> 
    </TabControl.ItemTemplate> 

    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <DataGrid> 

       <DataGrid.ColumnHeaderStyle> 
        ... 
       </DataGrid.ColumnHeaderStyle> 

       <DataGrid.CellStyle> 
        ... 
       </DataGrid.CellStyle> 

      </DataGrid> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

I Datenbindungen im Code weggelassen, so ist es besser liest.

Ich möchte eine Registerkarte und eine Zelle im Datagrid (Zeile und Spalte) angeben und nach dem Klicken auf eine Schaltfläche das Programm das angegebene Tag öffnen und durch die Tabelle scrollen, um die angegebene Zelle automatisch zu markieren, ähnlich wie wird in Visual Studio ausgeführt, wenn Sie auf einen Kompilierungsfehler klicken und Sie zu der Zeile in der Datei gelangen, in der der Fehler aufgetreten ist.

Ich ändere die ausgewählte Registerkarte mit Tab.SelectedIndex, und das funktioniert, aber ich kann nicht auf das DataGrid innerhalb der Registerkarte zugreifen, da es nur generiert wird, wenn die Registerkarte manuell angeklickt wird. Ich habe versucht, Load zu verwenden, aber es funktioniert nicht. Wie kann ich das Datagrid in jeder Registerkarte generieren und darauf zugreifen?

Antwort

0

Liegt es daran, dass es asynchron geladen wird? Versuchen Sie, die Rasterauswahl nach dem Laden mit dem Loaded-Ereignis auszuführen.

TabItem selectedTab = MyTabControl.SelectedItem as TabItem; 
selectedTab.Loaded+= delegate { //select grid row }; 

//or if this works, I'm sure it would have been initialized in the process of being selected? 
TabItem selectedTab = MyTabControl.SelectedItem as TabItem; 
selectedTab.MyGrid... 

Oder vielleicht selectedTab.Initialized.

die Registerkarte Artikel sind auch Kinder der TabControl, so sollten Sie sie zugreifen können Kinder [index] als TabItem mit

+0

ich die Registerkarte kann nicht einmal ich weiß nicht zugreifen, wie es zu tun mit Vorlagen. – user3468164

+0

"Ich ändere die ausgewählte Registerkarte mit Tab.SelectedIndex, und das funktioniert, aber ich kann nicht auf das Datagrid innerhalb der Registerkarte zugreifen" Können Sie den Code für das zeigen, was Sie versuchen, ein bisschen mehr zu tun? – Joe

+0

Ich nannte meinen TabControl wie folgt aus: Danach habe ich die Registerkarte in Code-behind ausgewählt wie folgt aus: MyTabControl.SelectedIndex = theIndexIWant; Aber ich weiß nicht, wie man den Inhalt der Registerkarte, die ich gerade ausgewählt habe, bekommen, weil es noch nicht geladen ist. – user3468164