我有一个用户控件内的自定义面板一个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大小,所以它会调整大小以其父了。尝试将ItemsControlHorizontalAlignmentVerticalAlignmentCenter;这将使ItemsControl的实际尺寸匹配它的内容的。

其他提示

ItemsControl本身具有BorderBrushBorderThickness性质。你可能想使用那些自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);
}
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top