Почему ActualWidth и ActualHeight 0.0 в этом случае?

Я определенно использовал бы:

try
{
    //some code
}
catch
{
    //you should totally do something here, but feel free to rethrow
    //if you need to send the exception up the stack.
    throw;
}

, Который сохранит Ваш стек.

43
задан Sibbo 19 April 2018 в 12:08
поделиться

2 ответа

ActualHeight и ActualWidth не устанавливаются, пока не будет измерен и упорядочен элемент управления. Обычно в InitializeComponent () нет ничего, что вызывает измерение, поэтому, когда он возвращает, они все равно будут нулем.

Вы можете принудительно вычислить их раньше, просто вызвав окно Measure ( ) и Arrange () вручную после возврата из окна InitializeComponent () .

Если вы изменяете размер содержимого:

window.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));

Если вы используете явное окно size:

window.Measure(new Size(Width, Height));
window.Arrange(new Rect(0, 0, window.DesiredSize.Width, window.DesiredSize.Height));
77
ответ дан 26 November 2019 в 22:28
поделиться

Луч прав (+1), это связано с тем, что проход измерения и аранжировки еще не выполнен. Однако вместо того, чтобы форсировать еще один проход макета (дорого), вы можете просто подождать, пока ваш элемент управления загрузится, прежде чем обращаться к свойствам ActualXxx :

public MyWindow()
{
    Loaded += delegate
    {
        // access ActualWidth and ActualHeight here
    };

}
64
ответ дан 26 November 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: