2010-11-08 6 views
0

Dans mon application, essayez de positionner 8 petits carrés autour d'un grand. Voir l'image ci-dessous.Comportement de remplissage étrange

alt text

<UserControl 
    <UserControl.Resources> 
    <Style x:Key="ResizerStyle" TargetType="UserControl"> 
    <Setter Property="Width" Value="{Binding Padding.Top, ElementName=border, Mode=Default}"/> 
    <Setter Property="Height" Value="{Binding Padding.Top, ElementName=border, Mode=Default}"/> 
    </Style> 
    <Thickness x:Key="ScalersSize">8</Thickness> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot"> 
     <Border x:Name="border" BorderThickness="1" Panel.ZIndex="-1000" Padding="{DynamicResource ScalersSize}" Background="#00000000"> 
      <Rectangle Fill="#FFC00000"/> 
     </Border> 
     <local:Scaler VerticalAlignment="Top" Cursor="SizeNS" HorizontalAlignment="Center" Style="{StaticResource ResizerStyle}"/> 
     <local:Scaler VerticalAlignment="Top" Cursor="SizeNESW" HorizontalAlignment="Right" Style="{StaticResource ResizerStyle}"/> 
     <local:Scaler VerticalAlignment="Top" HorizontalAlignment="Left" Cursor="SizeNWSE" Style="{StaticResource ResizerStyle}"/> 
     <local:Scaler VerticalAlignment="Bottom" Cursor="SizeNS" Style="{StaticResource ResizerStyle}"/> 
     <local:Scaler VerticalAlignment="Bottom" Cursor="SizeNWSE" Style="{StaticResource ResizerStyle}" HorizontalAlignment="Right"/> 
     <local:Scaler VerticalAlignment="Bottom" Cursor="SizeNESW" Style="{StaticResource ResizerStyle}" HorizontalAlignment="Left"/> 
     <local:Scaler HorizontalAlignment="Right" VerticalAlignment="Center" Cursor="SizeWE" Style="{StaticResource ResizerStyle}"/> 
     <local:Scaler HorizontalAlignment="Left" VerticalAlignment="Center" Cursor="SizeWE" Style="{StaticResource ResizerStyle}"/> 
    </Grid> 
</UserControl> 

Et ce qui suit rend carré rouge 62x62. Mais pour autant que je sache 80 - 8 * 2 = 64. Alors pourquoi est-il rendu comme 62 par 62 carrés?

Répondre

1

Je ne sais pas d'où vous obtenez le 80 car il ne se trouve nulle part dans votre XAML mais je suppose que c'est censé être la taille de l'UserControl externe. Dans votre calcul, vous avez manqué une partie: la frontière elle-même. Le paramètre BorderThickness est défini sur 1, ce qui signifie qu'il y a une zone de 1 unité sur tous les côtés pour la ligne de bordure, mais qu'elle n'est pas affichée car il n'y a pas de BorderBrush. Donc, la taille réelle est 80 - (8 * 2) - (1 * 2) = 62

+0

Droit! Mais je pensais que la frontière est rendue à l'intérieur, n'est-ce pas? Donc, si j'ai UserControl avec largeur et hauteur 50 et 5 frontière, ça va être 60 par 60? – Vitalij

+1

La bordure est un conteneur externe de son contenu enfant, il prend donc tout l'espace dont il a besoin en premier. Puisque le carré rouge est le rectangle à l'intérieur de la bordure, sa taille est déterminée par la combinaison de - - <Épaisseur de bordure> - -