2013-08-08 31 views
5

Tôi đang xử lý một vấn đề liên quan đến việc thay đổi kích thước cửa sổ chính sau khi thiết bị mở rộng bị thu hẹp và cửa sổ được thay đổi kích thước theo cách thủ công thành kích thước lớn hơn bằng cách kéo/thả trước đó. Expander được thu gọn nhưng cửa sổ chính không được thay đổi kích cỡ thành "fit" kích thước thành phần bên trong.WPF Expander và Window thay đổi kích thước sau khi thu gọn?

Các thành phần được đặt vào cột ô có kích thước tự động và cửa sổ chính được đặt thành nội dung kích thước WidhtAndHeight.

chính bộ tài sản cửa sổ:

SizeToContent="WidthAndHeight" 

Tôi đã làm giải pháp thông qua mã phía sau và sự kiện xử lý (trên sụp đổ và mở rộng sự kiện). Nhưng tôi nghĩ rằng WPF có cách tiếp cận tốt hơn ...

Expander XAML thực hiện:

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

Có ai có một đầu mối làm thế nào để thông minh giải quyết trường hợp này?

Cảm ơn bạn đã tư vấn.

Trả lời

3

Thuộc tính SizeToContent dường như mất giá trị của nó càng sớm càng tốt thay đổi kích thước cửa sổ bằng tay, để sửa lỗi này chỉ đăng ký vào các sự kiện OnSizeChanged của Window của bạn, và thiết lập lại các tài sản SizeToContent:

XAML:

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

Code-Behind:

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

Cảm ơn bạn đã trả lời, tùy chọn này cũng xuất hiện trong đầu của tôi, nhưng giải pháp sẽ không được làm việc. Mỗi thay đổi kích thước cuộc gọi đến sự kiện không hoạt động với chiều cao và chiều rộng "hiện tại" của các điều khiển bên trong. Và thay đổi kích thước được khởi động lại để init giá trị h-w. – stenly

+0

Tôi đang sử dụng phương pháp này: Tôi đã tạo trình xử lý sự kiện cho extender_collapsed nơi tôi khởi động lại thuộc tính sizeWindow sizeToContent thành giá trị enum "Chiều rộng". Điều này làm việc nhưng giá trị w/h mới của các điều khiển bên trong bộ mở rộng sau khi thay đổi kích thước bị lãng quên khi điều khiển bị sập và mở rộng trở lại. Tôi tò mò nếu thậm chí tồn tại giải pháp trong ngôn ngữ XAML trong lớp xem ... – stenly

Các vấn đề liên quan