У меня есть куча предметов в панели с одинаковой высотой. Я хочу, чтобы элементы на панели уменьшали ширину на основе максимальной ширины самой панели.Как вы нажимаете дочерние элементы на пользовательской панели до определенного размера?
Например - Ширина панели 400, у вас есть 4 элемента на панели, каждый элемент получает ширину 100. Если бы это было 2 предмета, каждый элемент был бы 200 ширины.
После звонка child.Measure
во второй раз с ожидаемой шириной элемента, child.DesiredSize
полностью изменяется на что-то еще. Как заставить элемент взять ширину, которую я ему даю?
public class DynamicShrinkPanel : StackPanel
{
public DynamicShrinkPanel()
{
}
protected override Size MeasureOverride(Size constraint)
{
Size desiredSize = new Size();
foreach (UIElement child in InternalChildren)
{
// First call to get the desired size.
child.Measure(constraint);
double properChildWidth = constraint.Width/InternalChildren.Count;
// Second call to set what I want, doesn't do what I expect
child.Measure(new Size(properChildWidth, child.DesiredSize.Height));
desiredSize.Height = child.DesiredSize.Height;
desiredSize.Width += child.DesiredSize.Width;
}
return desiredSize;
}
}
звучит, как вы можете использовать '' UniformGrid' с Строк = «1» ' – ASh
правых, не написать пользовательскую панель для этого. Вместо этого используйте UniformGrid. – Clemens
UniformGrid не занимает полную ширину элемента управления, в который он вложен автоматически. Поэтому в моем случае, если доступная ширина равна 500, она будет использовать все 500, независимо от того, сколько или нескольких элементов вы положили в нее. Равномерная сетка, по-видимому, занимает как можно меньше места. – user99999991