2013-08-08 9 views
5

Mam do czynienia z jednym problemem dotyczącym zmiany rozmiaru okna głównego po rozwinięciu ekspandera i ręcznym przeskalowaniu okna do większego rozmiaru metodą przeciągania/upuszczania. Ekspander jest zwinięty, ale okno główne nie jest przeskalowane, aby dopasować rozmiar wewnętrznej części.Ekspander WPF i zmiana rozmiaru okna po zwinięciu?

Komponenty są umieszczane w kolumnach siatki o automatycznym rozmiarze, a główne okno ma rozmiar WidhtAndHeight.

Główny zestaw właściwość okna:

SizeToContent="WidthAndHeight" 

Zrobiłem rozwiązanie poprzez kod związany i obsługą zdarzeń (na zwijać i rozwijać wydarzenia). Ale myślę, że WPF ma lepsze podejście ...

realizacja

Expander XAML:

<Expander Name="expander" Grid.Column="2" Grid.Row="0" Grid.RowSpan="5" ExpandDirection="Right" ToolTip="Expand window for history details" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed" SizeChanged="expander_SizeChanged" > 
     <Expander.Header> 
      <TextBlock RenderTransformOrigin="0.3,1.5"> 
        <TextBlock.RenderTransform> 
         <TransformGroup> 
          <RotateTransform Angle="90" /> 
         </TransformGroup> 
        </TextBlock.RenderTransform> 
        Show history 
       </TextBlock> 
     </Expander.Header> 
     <StackPanel>    
      <ListView ItemsSource="{Binding Path=HistoryList}" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" MaxHeight="350" > 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Operation" DisplayMemberBinding="{Binding Operation}" /> 
        <GridViewColumn Header="Result" DisplayMemberBinding="{Binding Result}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     </StackPanel> 
    </Expander> 

Czy ktoś ma pojęcia jak inteligentny rozwiązać tę sprawę?

Dzięki za poradę.

Odpowiedz

3

Obiekt SizeToContent zdaje się tracić swoją wartość, jak tylko ręcznie zmienić rozmiar okna, aby rozwiązać ten problem po prostu zapisać się do OnSizeChanged przypadku okna i zresetować właściwość SizeToContent:

XAML:

<Window SizeToContent="WidthAndHeight" SizeChanged="MainWindow_OnSizeChanged"> 

Code-Behind:

private void MainWindow_OnSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    SizeToContent = SizeToContent.WidthAndHeight; 
} 
+0

Dzięki za odpowiedź, ta opcja również przyszedł mi do głowy, ale rozwiązanie nie będzie działać. Każda zmiana wielkości wywołania do wydarzenia nie działa z "bieżącą" wysokością i szerokością elementów sterujących w środku. Zmiana rozmiaru jest restartowana do wartości początkowych h-w. – stenly

+0

Używam tego podejścia: Utworzono procedurę obsługi zdarzeń dla extender_collapsed, w której zrestartuję właściwość mainWindow sizeToContent na wartość wyliczenia "Szerokość". To działa, ale nowa wartość w/h elementów sterujących wewnątrz ekstendera po zmianie rozmiaru zostanie zapomniana, gdy kontrola zostanie zwinięta i rozszerzona. Ciekaw jestem, czy istnieje rozwiązanie w języku XAML w warstwie widoku ... – stenly

Powiązane problemy