Wie ein Rahmen um ein Itemscontrol setzen?
-
13-09-2019 - |
Frage
Ich habe ein Itemscontrol mit einem benutzerdefinierten Panel innerhalb eines Usercontrol. Die usercontrols Größe nur durch die übergeordnete Fenstergröße beschränkt ist.
<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>
Ich möchte jetzt die Grenze nur um die resultierende Platte gezogen werden. Aber statt dem um das gesamte Netz gezogen oder wahrscheinlich genauer in der gleichen Größe wie das Netz.
Ich denke, dass ich die MeasureOverride richtig auf meinem HexagonalPanel implementiert, gibt es die richtige Größe, so sollten sie die Grenze nicht ziehen in dieser Größe?
Was bin ich fehlt?
Lösung
Sie haben keine Größe auf dem ItemsControl
gesetzt, so wird es auch an ihrer Mutter dimensioniert werden. Versuchen Sie, die ItemsControl
der HorizontalAlignment
und VerticalAlignment
Einstellung Center
; Das wird die ItemsControl
tatsächlichen Größe überein, dass der Inhalt machen.
Andere Tipps
ItemsControl
selbst hat BorderBrush
und BorderThickness
Eigenschaften. Sie wollen wahrscheinlich diejenigen da ItemsControl
eine Border
in seiner ControlTemplate
standardmäßig verwenden hat.
Sie können dies erreichen, Berechnung und neuen Größenwert zu aktualisieren:
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);
}
}