Вопрос

У меня есть элемент управления с настраиваемой панелью внутри пользовательского элемента управления.Размер пользовательских элементов управления ограничен только размером родительского окна.

<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's 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);
}
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top