6

给定以下 xaml 结构

<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,我如何让它消失?

4

1 回答 1

5

通过使用Snoop,您可以看到这是来自ContainerVisual包裹您 child TextBlocks 的 a。由于TextBlock试图显示Inline派生对象的集合(这通常被抽象出来),它必须将你TextBlockContainerVisual.

由于这些是由 parent 安排的实际对象TextBlock,并且它们甚至没有Visibility属性,因此您将需要稍微重构您的代码。我想您正在尝试绑定到许多单独的属性,并希望将它们显示在一个 TextBlock 中。您可以通过以下几种方式解决此问题:

  • 制作一个IMultiValueConverter并传递一堆控制显示内容的属性
  • 在你的ViewModel
  • TextBlock用withStackPanel替换外部Orientation="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>
于 2013-08-27T13:43:17.823 回答