6

ユーザーコントロール内にカスタムパネルを備えたitemscontrolがあります。usercontrolsのサイズは、親ウィンドウのサイズによってのみ制約されます。

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

結果のパネルの周りにのみ境界線を描画するようにします。しかし、代わりに、グリッド全体、またはおそらくより正確にはグリッドと同じサイズで描画されます。

HexagonalPanelにMeasureOverrideを正しく実装したと思います。正しいサイズが返されるので、そのサイズで境界線を描画するべきではありませんか?

私は何が欠けていますか?

4

3 に答える 3

6

にサイズを設定していないItemsControlため、親にもサイズが設定されます。ItemsControlとを に設定してみてHorizontalAlignmentください。これにより、の実際のサイズがコンテンツのサイズと一致します。VerticalAlignmentCenterItemsControl

于 2009-06-10T16:24:17.650 に答える
4

ItemsControlそれ自体はBorderBrushBorderThicknessプロパティを持っています。デフォルトでItemsControlがあるので、おそらくそれらを使用したいと思うでしょう。BorderControlTemplate

于 2009-06-10T16:21:39.950 に答える
0

新しいサイズ値を計算して更新することで、これを実現できます。

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);
}
}
于 2015-11-07T01:53:23.843 に答える