Итак, я работаю над Pie Control с Orbit View из набора инструментов сообщества Windows.![Pie Control?](https://i.stack.imgur.com/tRHxD.png)
Я пытался изменить поведение просмотра орбиты, чтобы упорядочить элемент, начинающийся сверху, а не в левом центре.
Здесь, когда «Просмотр орбиты» имеет только один элемент.![Here](https://i.stack.imgur.com/YmNHe.png)
Я попытался отследить его и нашел код, который Orbit View использовал для упорядочивания элемента.Но проблема в том, что я ничего не знаю о математике и не знаю, где изменить значение: / Итак, вот код.
protected override Size ArrangeOverride(Size finalSize)
{
var angle = 2 * Math.PI / Children.Count;
var minDistance = 80;
var maxDistance = Math.Max(minDistance, (Math.Min(finalSize.Width, finalSize.Height) - OrbitView.MaxItemSize) / 2);
var elementsProperties = new List<OrbitViewElementProperties>();
for (var i = 0; i < Children.Count; i++)
{
var element = Children.ElementAt(i);
OrbitViewDataItem orbitViewDataItem = null;
if (element is FrameworkElement)
{
orbitViewDataItem = ((FrameworkElement)element).DataContext as OrbitViewDataItem;
}
var d = orbitViewDataItem != null && orbitViewDataItem.Distance >= 0 ? orbitViewDataItem.Distance : 0.5;
d = Math.Min(d, 1d);
var distance = (d * (maxDistance - minDistance)) + minDistance;
var x = distance * Math.Cos((angle * i) + (angle / 2));
var y = distance * Math.Sin((angle * i) + (angle / 2));
var x_normalized = (finalSize.Width / 2) + x - (element.DesiredSize.Width / 2);
var y_normalized = (finalSize.Height / 2) - y - (element.DesiredSize.Height / 2);
var point = new Point(x_normalized, y_normalized);
element.Arrange(new Rect(point, element.DesiredSize));
var elementProperties = new OrbitViewElementProperties()
{
XYFromCenter = new Point(x, y),
DistanceFromCenter = distance,
Element = element
};
elementsProperties.Add(elementProperties);
if (ItemArranged != null)
{
var args = new OrbitViewPanelItemArrangedArgs()
{
ElementProperties = elementProperties,
ItemIndex = i
};
ItemArranged.Invoke(this, args);
}
}
ItemsArranged?.Invoke(this, new OrbitViewPanelItemsArrangedArgs() { Elements = elementsProperties });
return finalSize;
}
Итак, где я могу изменить его, чтобы заставить его начать ставитьэлемент в верхнем центре (0 градусов) вместо левого центра (270 градусов)
Редактировать: Я разветвляю проект и удаляю весь элемент только для нескольких элементов управления: https://github.com/ray1997/WindowsCommunityToolkit/tree/ForJustR Код Iупомянутое выше здесь: https://github.com/ray1997/WindowsCommunityToolkit/blob/ForJustR/Microsoft.Toolkit.Uwp.UI.Controls/OrbitView/OrbitViewPanel.cs строка 90