Как я могу получить реальную текущую высоту стековой панели? - PullRequest
2 голосов
/ 10 сентября 2010

Алло,

Я хочу создать пользовательскую стековую панель в WPF, которая автоматически изменяет размеры дочерних элементов до определенного размера в зависимости от высоты панелей. Но высота панелей динамична, потому что она простирается до его родителя. Когда я хочу получить высоту (я попробовал все возможности, см. Код), она всегда равна 0 или не определена, хотя в решении для сборки она определенно не равна 0. Вот код:

XAML:

<my:AutoSizeButtonStackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>

Код-за:

public class AutoSizeButtonStackPanel : StackPanel
{
    public void AddChild(Button newButton)
    {
        double getPanelHeight;
        getPanelHeight = this.ActualHeight; //is 0
        getPanelHeight = this.ViewportHeight; //is 0
        getPanelHeight = this.Height; //is n. def.
        getPanelHeight = this.DesiredSize.Height; //is 0
        getPanelHeight = this.RenderSize.Height; //is 0

        newButton.Height = getPanelHeight / 2;

        this.Children.Add(newButton);
    }
}

Ответы [ 2 ]

3 голосов
/ 10 сентября 2010

Это может быть связано с , когда вы фактически запрашиваете this.ActualHeight. В момент вызова AddChild() высота действительно может быть 0, потому что проход измерения и проход аранжировки , возможно, еще не прошли. Все, что влияет на размер и расположение ваших детей, должно быть сделано в MeasureOverride и ArrangeOverride

Вы должны посмотреть, как писать собственные панели. На эту тему существует множество ресурсов. Лично я считаю, что это хороший и достаточно простой учебник.

0 голосов
/ 10 сентября 2010

ActualHeight является правильным свойством, но в точке, где вы его читаете, высота еще не рассчитана.

Перейдите по этой ссылке, чтобы узнать рекомендуемый способ создания пользовательской панели макета: http://www.wpftutorial.net/CustomLayoutPanel.html

...