2013-08-27 16 views
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から来て、どうすればそれを消すことができますか?

答えて

5

Snoopを使用すると、これはTextBlockの子供を包むContainerVisualからのものであることがわかります。 TextBlockInline派生オブジェクトのコレクションを表示しようとしているため(これは一般的に抽象化されています)、TextBlockContainerVisualにラップする必要があります。

これらは親オブジェクトTextBlockによってアレンジされている実際のオブジェクトであり、Visibilityプロパティもないので、コードを少しリファクタリングする必要があります。私はあなたがいくつかの別々のプロパティにバインドしようとしており、それらを1つのTextBlockに表示したいと考えています。 IMultiValueConverterを作成し、

  • Orientation="Horizontal"StackPanelと外側TextBlockを交換し、あなたのViewModel
  • で複雑な文字列を作成し表示するために何を制御するプロパティの束を渡し

    • :あなたはこのいくつかの方法を修正することができ

    私は一番簡単なので最後の方をお勧めします。

    <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

    うわー、素晴らしい答え!ありがとう... –