如何把边框一个ItemsControl?
-
13-09-2019 - |
题
我有一个用户控件内的自定义面板一个ItemsControl。该用户控件的大小仅由父窗口尺寸的约束。
<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>
我现在想边境只有大约产生的面板绘制。 而是其在相同大小的网格整个网格或可能更精确地绘制左右。
我想我正确实施的MeasureOverride我HexagonalPanel,它返回正确的尺寸,所以不应该在这一点尺寸绘制边框?
我是什么失踪?
解决方案
您还没有设置在ItemsControl
大小,所以它会调整大小以其父了。尝试将ItemsControl
的HorizontalAlignment
和VerticalAlignment
到Center
;这将使ItemsControl
的实际尺寸匹配它的内容的。
其他提示
ItemsControl
本身具有BorderBrush
和BorderThickness
性质。你可能想使用那些自ItemsControl
在默认情况下,它的Border
一个ControlTemplate
。
可以实现这一点,计算和更新新的大小值:
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);
}
}
不隶属于 StackOverflow