2015-07-07 23 views
7

Mam TabControl który jest związany z kolekcji ViewModels, które są tłumaczone na odpowiednie dać się wciągnąć w zakładce:WPF TabControl wziąć rozmiar największego karcie

<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" /> 

Próbowałam znaleźć sposób, aby zawsze narysować TabControl na maksymalnej szerokości i wysokości dowolnego z jego dzieci. Let WPF Tabcontrol height assume height of largest item? wymienia kilka sposobów na osiągnięcie tego w odpowiedziach (z tego co ja udnerstood):

  • z wykorzystaniem siatki z SharedSizeGroup - Wydaje się, muszą być stosowane do DataTemplate na rzeczywistej zawartości TabControl, który nadpisuje zautomatyzowane Zobacz rysunek achieveing ​​przez VM-> Widok mapowania utworzonej w ResourceDictionary
  • użyciu konwertera szerokość/wysokość, co wymagałoby mojego TabControl być związany z kolekcji elementów UI zamiast ViewModels

Czy ktoś masz jakieś doświadczenie w rozwiązywaniu podobnego problemu? Wydaje mi się, że uderzam coraz więcej murów za każdym razem, gdy robię postępy w tej sprawie.

+0

[Ta odpowiedź] (http://stackoverflow.com/a/14865928/ 302677) może być na dobrej drodze. Myślę, że będziesz musiał użyć ItemsContainerGenerator, aby wygenerować element interfejsu dla każdego elementu w ItemSource, i określić rozmiar tego elementu (być może za pomocą kodu z [tej odpowiedzi] (http://stackoverflow.com/a/1074344/302677)?), Aby ustalić, jaki byłby maksymalny rozmiar. – Rachel

Odpowiedz

0

Trzeba używać nazwanych ukryte elementy sterujące, które można dopasować automatycznie i stworzyć prostą wiążą ich szerokość/wysokość jak:

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