给出以下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>
Run Code Online (Sandbox Code Playgroud)
我期待这个输出:
Block 1 Block 2
Block 4
Block 5 Block 6
Run Code Online (Sandbox Code Playgroud)
但我明白了
Block 1 Block 2
Block 4
Block 5 Block 6
Run Code Online (Sandbox Code Playgroud)
Block 4来自之前的空间在哪里,我该如何让它消失?
通过使用Snoop,您可以看到这是来自ContainerVisual包装您孩子TextBlock的.因为TextBlock试图显示Inline派生对象的集合(这通常被抽象掉),所以它必须包装你TextBlock的ContainerVisual.
由于这些是由父级安排的实际对象TextBlock,并且它们甚至没有Visibility属性,因此您需要稍微重构一下代码.我想你正在尝试绑定到许多单独的属性,并希望在一个TextBlock中显示它们.您可以通过以下两种方式解决此问题:
IMultiValueConverter并传递一系列属性来控制要显示的内容ViewModelTextBlock有一个StackPanel带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>
Run Code Online (Sandbox Code Playgroud)