6

我在用户控件中有一个带有自定义面板的项目控件。用户控件的大小仅受父窗口大小的限制。

<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'sHorizontalAlignmentVerticalAlignmentto Center; 这将使ItemsControl' 的实际大小与其内容相匹配。

于 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 回答