2009-05-08 38 views
11

Tôi có một mạng lưới với một vài hàng. Trong hàng trên cùng, tôi có một ItemsControl bị ràng buộc động tới một bộ sưu tập và sử dụng một DataTemplateSelector và ItemsPanelTemplate (với một WrapPanel được sắp xếp theo chiều ngang). Dưới đây là một phiên bản rút gọn của những gì tôi có cho đến nay:Liên kết chiều cao của hàng lưới với nội dung của nó trong WPF

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="40" /> 
     <RowDefinition Height="2" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <GridSplitter Background="#666" Grid.Row="1" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" /> 
    <ItemsControl x:Name="items" Background="#DDD" Grid.Row="0" ItemTemplateSelector="{StaticResource itemTemplateSelector}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel Orientation="Horizontal" /> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 
</Grid> 

Thay vì thiết lập chiều cao hàng đầu tiên của 40, tôi muốn cài đặt nó tự động dựa trên chiều cao tối thiểu mà ItemsControl phải để phù hợp với tất cả nội dung của nó. Vì chiều cao của ItemsControl đang bị hạn chế bởi chiều cao của Grid Row, tôi không thể tìm ra phần tử nào mà tôi nên ràng buộc và thuộc tính của phần tử nào mà tôi nên ràng buộc nó.

Sẽ có ý nghĩa khi liên kết Chiều cao của hàng lưới với "chiều cao mong muốn" của ItemsControl. Vì vậy, tôi tìm thấy tài sản DesiredSize và ràng buộc chiều cao RowDefinition của tôi để DesiredSize.Height của ItemsControl. Điều đó hoạt động khi nó tải lần đầu tiên, nhưng không cập nhật khi tôi thay đổi kích thước điều khiển (nhớ, tôi đang sử dụng một WrapPanel như ItemsPanelTemplate của tôi, vì vậy khi tôi thay đổi kích thước cửa sổ, chiều cao của ItemsControl sẽ thay đổi).

Có ai biết nếu tình huống này thậm chí được hỗ trợ bởi khuôn khổ ràng buộc hay tôi cần thêm mã xử lý sự kiện để thực hiện việc này?

Cảm ơn.

Trả lời

30

Bạn có cố gắng thiết lập chiều cao để tự động để đạt được những gì bạn muốn:

<RowDefinition Height="Auto"/> 

(? Hay am i suy nghĩ quá đơn giản ở đây ..)

+0

Ừ ... đôi khi các giải pháp đơn giản chỉ cần thoát bạn . Cảm ơn – Rich

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