2013-08-27 16 views
6

考慮下面的XAML結構能見度癱倒在UI留下輕微的空間

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

我希望這樣的輸出:

Block 1 Block 2 
Block 4 
Block 5 Block 6 

但我得到這個

Block 1 Block 2 
Block 4 
Block 5 Block 6 

在哪裏來自Block 4之前的空間,以及如何讓它消失?

回答

5

通過使用Snoop,你可以看到這是從一個ContainerVisual包裝你的孩子TextBlock s。由於TextBlock正試圖顯示Inline派生對象的集合(這通常是抽象出來的),它必須將您的TextBlock包裝在ContainerVisual中。

由於這些是由父TextBlock安排的實際對象,並且它們甚至沒有Visibility屬性,所以您將需要稍微重構您的代碼。我想象你正試圖綁定到一些單獨的屬性,並希望將它們顯示在一個TextBlock中。你能解決這個幾個方面:

  • 做一個IMultiValueConverter並通過一束性質的控制,應該顯示哪些
  • 構建複雜的字符串在ViewModel
  • 更換外TextBlockStackPanelOrientation="Horizontal"

我推薦最後一個,因爲它是最簡單的。

<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

哇,很好的回答!謝謝... –