2009-06-10 10 views
6

J'ai un contrôle d'articles avec un panneau personnalisé à l'intérieur d'un contrôle d'articles. La taille de usercontrols est uniquement limitée par la taille de la fenêtre parente.WPF - Contour d'un contrôle d'articles

<UserControl> 
    <Grid> 
    <Border BorderBrush="DarkGray" BorderThickness="5"> 
     <ItemsControl ItemsSource="{Binding ActiveGame.Grid.CellsFlat}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
      <Wpf:HexagonalPanel/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
      <Button /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Border> 
    </Grid> 
</UserControl> 

Je souhaite maintenant que la bordure soit dessinée uniquement autour du panneau résultant. Mais à la place il est dessiné autour de la grille entière ou probablement plus précisément à la même taille que la grille.

Je pense que j'ai implémenté le MeasureOverride correctement sur mon HexagonalPanel, il renvoie la bonne taille, donc ne devrait-il pas dessiner la bordure à cette taille?

Qu'est-ce qui me manque?

Merci

Répondre

5

Vous n'avez pas défini de taille sur ItemsControl, donc il sera également dimensionné pour son parent. Essayez de définir HorizontalAlignment ItemsControl et VerticalAlignment au Centre; cela fera correspondre la taille réelle de ItemsControl à celle de son contenu.

+0

grâce cela a fonctionné Je dois encore apprendre! beaucoup sur le système de mise en page WPF – eric

+0

Je vous entends. –

2

ItemsControl lui-même a des propriétés BorderBrush et borderThickness. Vous voudrez probablement les utiliser car ItemsControl a une bordure dans son ControlTemplate par défaut.

+0

Nope malheureusement son même résultat :-(Merci – eric

+0

, qui a travaillé pour moi –

0

vous pouvez achive cela, le calcul et la mise à jour nouvelle valeur de taille:

public class MyPanel : Panel{ 
protected override Size ArrangeOverride(Size finalSize){ 

// calculate new size 
........ 

this.SetValue(WidthProperty, totalwidth); 
    this.SetValue(HeightProperty, totalheight); 

return new Size(totalwidth, totalheight); 
} 
}