У меня есть список, который содержит любое количество UIElement
s, размер которых неизвестен.
Я хочу иметь возможность отслеживать предлагаемый размер списка после добавления каждого элемента.Это позволит мне разбить большой список (например, 100 элементов) на несколько (например, 10) небольших списков примерно одинакового размера визуальный независимо от визуального размера каждого из них.элемент в списке.
Однако, похоже, что проход Measure влияет только на свойство ListBox
DesiredSize
при первом вызове Measure:
public partial class TestWindow : Window
{
public TestWindow()
{
InitializeComponent();
ListBox listBox = new ListBox();
this.Content = listBox;
// Add the first item
listBox.Items.Add("a"); // Add an item (this may be a UIElement of random height)
listBox.Measure(new Size(double.MaxValue, double.MaxValue)); // Measure the list box after the item has been added
Size size1 = listBox.DesiredSize; // reference to the size the ListBox "wants"
// Add the second item
listBox.Items.Add("b"); // Add an item (this may be a UIElement of random height)
listBox.Measure(new Size(double.MaxValue, double.MaxValue)); // Measure the list box after the item has been added
Size size2 = listBox.DesiredSize; // reference to the size the ListBox "wants"
// The two heights should have roughly a 1:2 ratio (width should be about the same)
if (size1.Width == size2.Width && size1.Height == size2.Height)
throw new ApplicationException("DesiredSize not updated");
}
}
Я пыталсядобавление вызова:
listBox.InvalidateMeasure();
между добавлением элементов безрезультатно.
Существует ли простой способ вычислить желаемый размер ListBox
(или любого ItemsControl
)в то время, когда элементы добавляются?