Класс System.Windows.UIElement предоставляет методы для измерения себя вне любых отношений родительских и дочерних элементов.
Очень важно проверить IsMeasureValid, прежде чем пытаться использовать значения измерений. Если IsMeasureValid имеет значение false, необходимо вручную вызвать метод UIElement.Measure (), чтобы убедиться, что у вас есть актуальное измерение элемента и его содержимого. Если IsMeasureValid имеет значение true, измерение не повредит. Он просто перезапишет все предыдущие измерения, которые он сохранил.
Если требуется точное измерение элемента без внешних ограничений, укажите бесконечный размер в качестве параметра availableSize для метода UIElement.Measure ().
Метод UIElement.Measure () сохраняет измеренный размер элемента в свойстве UIElement.DesiredSize. Я не верю, что это оказывает какое-либо негативное влияние на систему рендеринга WPF из-за того, что любой родительский элемент гарантированно повторно измеряет элемент с собственными доступными ограничениями размера перед его рендерингом. Это может повлиять на конечный размер элемента на экране, но не повлияет на исходный желаемый размер элемента до применения ограничений parent-child.
namespace MyCLRNamespace
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
Polygon MyPolygon = new Polygon();
MyPolygon.Points = new PointCollection { new Point(100, 0),
new Point(200, 200),
new Point(0, 200) };
//if (MyPolygon.IsMeasureValid == false)
MyPolygon.Measure(new Size( double.PositiveInfinity,
double.PositiveInfinity));
double PolyWidth = MyPolygon.DesiredSize.Width;
}
}
}