2009-06-10 118 views
6

我有一个用户控件内的自定义面板的itemscontrol。 usercontrols的大小只受到父窗口大小的限制。WPF - 项目控件周围的边框

<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,它返回正确的大小,所以不应该在该大小绘制边界?

我错过了什么?

谢谢

回答

5

您还没有在ItemsControl上设置尺寸,所以它的尺寸也会根据它的父项设置。尝试将ItemsControl的Horizo​​ntalAlignment和VerticalAlignment设置为居中;这将使ItemsControl的实际大小与其内容匹配。

2

ItemsControl本身具有BorderBrush和BorderThickness属性。你可能想要使用它们,因为默认情况下,ItemsControl的ControlTemplate中有一个边框。

+0

没了遗憾的是其同样的结果:-( – eric 2009-06-10 16:24:21

+0

谢谢,这为我工作 – 2017-08-09 11:06:29

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); 
} 
}