2015-07-07 15 views
7

Ho un TabControl che è destinata a una raccolta di ViewModels, che vengono tradotti in un appropriato per essere aspirato nella scheda:WPF TabControl prendere dimensioni del più grande scheda

<Window.Resources> 
    <ResourceDictionary> 
     <DataTemplate DataType="{x:Type charting:LineFormatViewModel}"> 
      <charting:LineFormatView /> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type charting:IndexSettingsViewModel}"> 
      <charting:IndexSettingsView /> 
     </DataTemplate> 
     .... 
    </ResourceDictionary> 
</Window.Resources> 

<TabControl ItemSource="Binding ViewModels" /> 

Ho cercato di trovare un modo per disegnare sempre TabControl alla larghezza e all'altezza massima di qualsiasi bambino. Let WPF Tabcontrol height assume height of largest item? menzioni un paio di modi per raggiungere questo nelle risposte (da quello che ho udnerstood):

  • usando Griglia con SharedSizeGroup - sembra aver bisogno di essere applicato ad un DataTemplate sul contenuto effettivo del TabControl, che sovrascrive il automatizzato vista del disegno achieveing ​​dal VM-> Visualizza mappatura creata nel ResourceDictionary
  • Utilizzando un convertitore di larghezza/altezza, che richiederebbe la mia TabControl ad essere vincolati ad un insieme di elementi di interfaccia utente, invece di ViewModels

qualcuno hai qualche esperienza nella risoluzione di un problema simile? Sembro colpire più muri ogni volta che faccio qualche progresso su questo.

+0

[Questa risposta] (http://stackoverflow.com/a/14865928/ 302677) potrebbe essere sulla strada giusta. Penso che avrai bisogno di usare ItemsContainerGenerator per generare l'elemento dell'interfaccia utente per ogni elemento in ItemsSource e determinare la dimensione di quell'elemento (magari usando il codice da [questa risposta] (http://stackoverflow.com/a/1074344/302677)?) Per capire quale sarebbe la dimensione massima. – Rachel

risposta

0

è necessario utilizzare comandi nascosti denominati in grado di adattare automaticamente e creare legano direttamente alla loro larghezza/altezza come:

Width="{Binding ActualWidth, ElementName=MainGrid}" 
Problemi correlati