Как поставить границу вокруг ItemsControl? - PullRequest
6 голосов
/ 10 июня 2009

У меня есть itemcontrol с пользовательской панелью внутри usercontrol. Размер 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>

Теперь я хочу, чтобы граница рисовалась только вокруг получившейся панели. Но вместо этого он нарисован вокруг всей сетки или, возможно, точнее того же размера, что и сетка.

Я думаю, что правильно реализовал MeasureOverride на моей HexagonalPanel, он возвращает правильный размер, поэтому не должен ли он рисовать границу с таким размером?

Что мне не хватает?

Ответы [ 3 ]

6 голосов
/ 10 июня 2009

Вы не установили размер для ItemsControl, поэтому он будет также соответствовать его родительскому элементу. Попробуйте установить ItemsControl s HorizontalAlignment и VerticalAlignment на Center; это приведет к тому, что фактический размер ItemsControl будет соответствовать его содержимому.

3 голосов
/ 10 июня 2009

ItemsControl сам имеет свойства BorderBrush и BorderThickness. Вы, вероятно, хотите использовать их, поскольку ItemsControl имеет Border в ControlTemplate по умолчанию.

0 голосов
/ 07 ноября 2015

Вы можете достичь этого, вычисляя и обновляя новое значение размера:

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