2009-06-10 11 views
6

Ho un controllo items con un pannello personalizzato all'interno di un controllo utente. La dimensione di usercontrols è limitata solo dalla dimensione della finestra principale.WPF - Bordo attorno a un controllo articoli

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

Ora desidero disegnare il bordo solo attorno al pannello risultante. Invece è disegnato attorno all'intera griglia o probabilmente più precisamente alla stessa dimensione della griglia.

Penso di aver implementato correttamente MeasureOverride sul mio HexagonalPanel, restituisce la dimensione corretta, quindi non dovrebbe disegnare il bordo con quella dimensione?

Cosa mi manca?

Grazie

risposta

5

Non hai impostato una dimensione su ItemsControl, quindi verrà ridimensionata anche a quella principale. Prova a impostare HorizontalAlignment e VerticalAlignment di ItemsControl su Center; ciò renderà le dimensioni effettive di ItemsControl corrispondenti a quelle del suo contenuto.

+0

grazie ha funzionato ho ancora da imparare! molto sul sistema di layout WPF – eric

+0

Ti ho sentito. Ci vuole un po 'per abituarsi. –

2

ItemsControl stessa ha BorderBrush e BorderThickness proprietà. Probabilmente vorrai usarli dal momento che ItemsControl ha un Border nel suo ControlTemplate per impostazione predefinita.

+0

no, purtroppo, la sua lo stesso risultato :-( – eric

+0

Grazie, che ha lavorato per me –

0

si può raggiungere questo obiettivo, il calcolo e l'aggiornamento nuovo valore size:

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); 
} 
}