我在usercontrol中有一个带有自定义面板的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,它返回了正确的大小,所以它不应该绘制那个大小的边框吗?
我错过了什么?
答案 0 :(得分:6)
您尚未在ItemsControl
上设置尺寸,因此它也会根据其父级进行调整。尝试将ItemsControl
的{{1}}和HorizontalAlignment
设置为VerticalAlignment
;这将使Center
的实际尺寸与其内容相匹配。
答案 1 :(得分:3)
ItemsControl
本身具有BorderBrush
和BorderThickness
属性。您可能希望使用那些,因为ItemsControl
默认情况下Border
中有ControlTemplate
。
答案 2 :(得分: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);
}
}