2013-08-27 10 views
6

Biorąc pod uwagę następujące XAML strukturaWidoczność Zwinięty pozostawiając niewielką przestrzeń w interfejsie

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

Oczekuję tego wyjścia:

Block 1 Block 2 
Block 4 
Block 5 Block 6 

Ale otrzymuję ten

Block 1 Block 2 
Block 4 
Block 5 Block 6 

Gdzie jest spacja przed Block 4 pochodząca i jak mogę ją odejść?

Odpowiedz

5

Używając Snoop, możesz zobaczyć, że jest to ContainerVisual, który otula Twoje dziecko. TextBlock s. Ponieważ TextBlock próbuje wyświetlić kolekcję obiektów pochodnych Inline (jest to zwykle odrysowywane), musi zawinąć twój TextBlock w ContainerVisual.

Ponieważ są to rzeczywiste obiekty zaaranżowane przez rodzica TextBlock, i nie mają one nawet właściwości Visibility, będziesz musiał nieco zmienić swój kod. Wyobrażam sobie, że próbujesz powiązać szereg różnych właściwości i chcesz wyświetlić je w jednym bloku TextBlock. Można rozwiązać ten problem na kilka sposobów:

  • Zrób IMultiValueConverter i przekazać kilka właściwości kontrolowania co pokazać
  • Construct złożony ciąg w ViewModel
  • Wymień zewnętrzną TextBlock z StackPanel z Orientation="Horizontal"

Polecam ostatni, ponieważ jest najłatwiejszy.

<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, świetna odpowiedź! Dzięki... –