2012-04-13 37 views
14

có thể bọc nội dung trong ngăn xếp không?nội dung gói trong ngăn xếp chồng chéo wpf

Tôi biết rằng chúng tôi có thể sử dụng WrapPanel thay thế. Nhưng vì lý do sửa đổi mã, tôi phải sử dụng Stackpanel.

Vì vậy, có cách nào để tạo các mục trong một chồng xếp chồng lên nhau sau khi nói 5 mục ... Cảm ơn!

+2

Tại sao bạn phải sử dụng 'StackPanel' thay vì' WrapPanel'? – Rachel

+0

có một số tính năng của ngăn xếp bảng điều khiển tht chúng tôi đã tùy chỉnh .. vì vậy chúng tôi có ảo hóa của chúng tôi được hỗ trợ bởi bảng ngăn xếp của chúng tôi .. tôi không muốn đi lên sáng tạo lại bánh xe để ảo hóa một bảng điều khiển bọc .. – user1202434

Trả lời

14

Tạo lồng nhau StackPanel s chứa số lượng mục yêu cầu.

Trong ví dụ bên dưới, bạn có hai hàng, tương ứng bị chiếm bởi các phần tử <StackPanel Orientation="Horizontal">, do đó mỗi phần chứa năm mục sẽ được hiển thị theo chiều ngang cạnh nhau.

<StackPanel Orientation="Vertical"> 
    <StackPanel Orientation="Horizontal"> 
     <Item1 /> 
     <Item2 /> 
     <Item3 /> 
     <Item4 /> 
     <Item5 /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <Item1 /> 
     <Item2 /> 
     <Item3 /> 
     <Item4 /> 
     <Item5 /> 
    </StackPanel> 
</StackPanel> 
4

Tùy thuộc vào trường hợp của bạn, bạn có thể sử dụng UniformGrid. Một vài ví dụ cũng có thể được tìm thấy here.

Bạn có thể xác định nó để gói sau 5 mục như thế này.

<UniformGrid Columns="5"> 
<Button /> 
<Button /> 
<Button /> 
</UniformGrid> 

Mỗi mục sẽ có chiều rộng chính xác, vì vậy, không chắc chắn điều này có hiệu quả với bạn hay không.

0

Tôi không nghĩ bạn có thể làm điều đó mà không có bảng điều khiển bọc. Có lẽ bạn có thể thử đặt một wrapPanel bên trong ngăn xếp ngăn xếp - thiết lập chiều rộng của nó thành Độ rộng thực tế của bảng ngăn xếp. Bạn có thể ràng buộc nó như Width="{Binding ActualWidth, ElementName=StackPanel1}"

Nhưng điều này sẽ chỉ là một hack - tôi nghĩ rằng bảng điều khiển bọc là phù hợp nhất cho nhu cầu của bạn.

7
<StackPanel> 
     <StackPanel.Style> 
      <Style TargetType="{x:Type StackPanel}"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type StackPanel}"> 
          <WrapPanel/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </StackPanel.Style> 
    </StackPanel> 
+8

Lolz. Điều đó sẽ làm tôi khó chịu. –

+3

:) Tôi nghe bạn, Ritch! .. nhưng, thật khó để nói lý do tại sao có sự nhấn mạnh như vậy về việc giữ stackPanel mà không có bất kỳ bối cảnh nào trong câu hỏi! Vậy đó! Đây là một loại (StackPanel) với WrapPanel như một bệnh ung thư nội bộ! –

+0

Điều này có nghiêm trọng không? –

9

Đối với tôi, một đơn giản WrapPanel công trình tốt:

<WrapPanel Orientation="Horizontal" Width="500" /> 

Không bên trong một StackPanel hoặc bất kỳ container khác. Và thiết lập Width đến một giá trị không đổi có thể im vượt trội một số trường hợp, vì ràng buộc nó để ActualWidth có thể ngăn chặn xuống cỡ (ví dụ như khi phụ huynh kiểm soát là xuống cỡ, WrapPanel không phải là)

+0

điều này là hoàn hảo khi bạn không có số lượng mục cố định cho mỗi hàng =) – mikelt21

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