2013-08-27 21 views
6

Với cơ cấu XAML sauTầm nhìn Collapsed để lại một không gian nhỏ trong giao diện người dùng

<Grid> 
    <StackPanel> 
     <TextBlock> 
      <TextBlock>Block 1</TextBlock> 
      <TextBlock>Block 2</TextBlock> 
     </TextBlock> 
     <TextBlock> 
      <TextBlock Visibility="Collapsed">Block 3</TextBlock> 
      <TextBlock>Block 4</TextBlock> 
     </TextBlock> 
     <TextBlock> 
      <TextBlock>Block 5</TextBlock> 
      <TextBlock>Block 6</TextBlock> 
     </TextBlock> 
    </StackPanel> 
    </Grid> 

Tôi hy vọng kết quả này:

Block 1 Block 2 
Block 4 
Block 5 Block 6 

Nhưng tôi có được điều này

Block 1 Block 2 
Block 4 
Block 5 Block 6 

ở đâu không gian trước Block 4 đến từ, và làm thế nào để làm cho nó biến mất?

Trả lời

5

Bằng cách sử dụng Snoop, bạn có thể thấy rằng đây là số ContainerVisual kết thúc tốt đẹp cho con của bạn TextBlock s. Vì TextBlock đang cố gắng hiển thị một bộ sưu tập gồm Inline đối tượng có nguồn gốc (thường được trừu tượng hóa), nó phải quấn TextBlock của bạn trong một ContainerVisual.

Vì đây là các đối tượng thực tế được bố trí bởi phụ huynh TextBlock và thậm chí chúng không có thuộc tính Visibility, bạn cần phải cấu trúc lại mã của mình một chút. Tôi tưởng tượng rằng bạn đang cố gắng liên kết với một số thuộc tính riêng biệt và muốn hiển thị chúng trong một TextBlock. Bạn có thể khắc phục điều này một vài cách sau:

  • Thực hiện một IMultiValueConverter và vượt qua một loạt các thuộc tính kiểm soát những gì để hiển thị
  • Xây dựng chuỗi phức tạp trong bạn ViewModel
  • Thay ngoài TextBlock với một StackPanel với Orientation="Horizontal"

Tôi muốn giới thiệu kết quả cuối cùng vì dễ nhất.

<StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock>Block 1</TextBlock> 
     <TextBlock>Block 2</TextBlock> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Visibility="Collapsed">Block 3</TextBlock> 
     <TextBlock>Block 4</TextBlock> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock>Block 5</TextBlock> 
     <TextBlock>Block 6</TextBlock> 
    </StackPanel> 
</StackPanel> 
+0

Wow, câu trả lời tuyệt vời! Cảm ơn... –

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