2009-11-30 37 views
7

Câu hỏi này giống với câu hỏi khác unanswered question.ListView với lồng nhau Expander không sụp đổ

Khi Expander được mở rộng bên ngoài ListView phát triển để tạo không gian cho các nội dung tăng thể, nhưng khi Expander sau đó sụp đổ quan điểm không buộc các ListView để thay đổi kích thước.

Giảm mã, với các ghi chú sau:

<!--<StackPanel>--> 
<ItemsControl> 

    <!-- ParameterGroupView --> 
    <Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4"> 
    <ListView HorizontalContentAlignment="Stretch"> 
     <Expander Header="Expander A" IsExpanded="False"> 
     <ListView HorizontalContentAlignment="Stretch"> 

      <!-- TextView --> 
      <TextBlock >Content A</TextBlock> 
      <TextBlock >Content B</TextBlock> 

     </ListView> 
     </Expander> 

    </ListView> 
    </Border> 

</ItemsControl> 
<!--</StackPanel>--> 

Tôi có ParameterGroupView trong một ItemsControl hoặc StackPanel vì không thực sự nhiều ParameterGroupView mục. Hoán đổi thành StackPanel không thay đổi hành vi.

Xóa Boarder không ảnh hưởng đến hành vi, nhưng việc này giúp hiển thị hành vi chỉ với một đơn ParameterGroupView.

Có thể có nhiều Expander phần trong ngoài ListView, và Expander có thể có nhiều đơn vị trong khu vực nội ListView.

Các bên ngoài ListViewExpander là để thay thế một TreeView, được sử dụng để có một danh sách các nút đóng mở, nhưng TreeView 's sử dụng nội bộ lưới, nghĩa là các mục TextView được đè bẹp horizonatlly, giống như khi bạn xóa ether HorizontalContentAlignment = "Stretch" thuộc tính.

Vì vậy, nếu có cách khác để bọc/dây tất cả những thứ này, tôi cũng sẽ rất vui.

Đây là vấn đề vì các khối TextView của chúng tôi lớn và có rất nhiều Expander s.

Chỉnh sửa: Chế độ xem văn bản được sử dụng làm mã bị ràng buộc dữ liệu và do đó được đặt động với nhau. Vì vậy, bất kỳ sự thay thế cho ListView sẽ cần một số hình thức ItemsSource

+0

Tôi cũng không muốn bất kỳ tương tác kiểu ListView nào với các mục nội dung. Tôi thực sự chỉ muốn có một điều khiển thay đổi kích thước động mà có thể bị ràng buộc quá. –

Trả lời

4

Tìm thấy giải pháp và chi tiết trong câu hỏi đã có.

MụcControl chấp nhận một ItemsSource và tự động định lại kích thước. Vì vậy, thay thế hai số ListView s bằng ItemControl s bị thu gọn lồng nhau.

Nhưng không có di chuyển, vì vậy gói bên ngoài ItemControl với một ScrollViewer, tái tạo hiệu quả mong muốn hoàn tất.

<ScrollViewer 
    VerticalScrollBarVisibility="Auto"> 
    <ItemsControl> 
     <!-- ParameterGroupView --> 
     <Border 
      BorderBrush="Brown" 
      BorderThickness="1" 
      CornerRadius="4" 
      Padding="4" 
      Height="Auto"> 
      <ItemsControl 
       HorizontalContentAlignment="Stretch"> 
       <Expander 
        Header="Expander A" 
        IsExpanded="False"> 
        <ItemsControl 
         HorizontalContentAlignment="Stretch"> 
         <!-- TextView --> 
         <TextBlock>Content A</TextBlock> 
         <TextBlock>Content B</TextBlock> 
        </ItemsControl> 
       </Expander> 
      </ItemsControl> 
     </Border> 
    </ItemsControl> 
</ScrollViewer> 

Tôi đã thử nghiệm với bộ tăng gấp đôi trong phần Biên giới và đường viền đôi.

+0

Chỉ cần thử nghiệm điều này trong ứng dụng thực tế, và điều này giải quyết vấn đề đó cũng có. –

2

Điều rõ ràng nhất để làm ở đây là để đưa expanders trong một container khác hơn là một listview:

<Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4"> 
    <StackPanel> 

     <Expander Header="Expander A" IsExpanded="False"> 
      <ListView HorizontalContentAlignment="Stretch" MinWidth="100"> 
       <ListBox Name="listb"></ListBox> 

       <!-- TextView --> 
       <TextBlock >Content A</TextBlock> 
       <TextBlock>Content B</TextBlock> 

      </ListView> 
     </Expander> 
    </StackPanel> 
</Border> 

container thay đổi kích thước xung quanh nội dung chỉ khỏe.

Nếu bạn hoàn toàn phải có nó trong ListView (có thể) thì tôi không biết cách để ListView có thể thay đổi kích thước dễ dàng khi nó được phát triển (ngoài việc đặt kích thước rõ ràng của toàn bộ điều, đó là vụng về và không hữu ích).Nếu đó là trường hợp thì có thể bạn sẽ phải sử dụng hộp danh sách có thể điều khiển để hiển thị tất cả mở rộng mở hoặc hiển thị nội dung theo cách khác (như trong cửa sổ bật lên, có thể?) Nếu bạn muốn có thể xem nó tất cả trong nháy mắt.

+0

Có, tôi đồng ý ListBox là có lỗi, nhưng tôi cần nó, hoặc một cái gì đó như nó, vì nó hỗ trợ ItemsSource, nơi mà như StackPanel thì không. Hệ thống thực tế của tôi là dữ liệu hoàn chỉnh bị ràng buộc, chứ không phải tĩnh. –

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