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?

War es hilfreich?

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);
}
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top