如何在ItemsControl周围放置边框?

时间:2009-06-10 16:01:25

标签: wpf xaml border itemscontrol

我在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,它返回了正确的大小,所以它不应该绘制那个大小的边框吗?

我错过了什么?

3 个答案:

答案 0 :(得分:6)

您尚未在ItemsControl上设置尺寸,因此它也会根据其父级进行调整。尝试将ItemsControl的{​​{1}}和HorizontalAlignment设置为VerticalAlignment;这将使Center的实际尺寸与其内容相匹配。

答案 1 :(得分:3)

ItemsControl本身具有BorderBrushBorderThickness属性。您可能希望使用那些,因为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);
}
}