3

ハロー、

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);
    }
}
4

2 に答える 2

5

これは、実際にクエリを実行するときthis.ActualHeightに関係している可能性があります。と呼ばれる時点では、メジャーパスとアレンジパスがまだ通過していない可能性がAddChild()あるため、実際には高さが 0のままである可​​能性があります。子のメジャーとレイアウトに影響を与えるすべてのことは、MeasureOverrideArrangeOverrideで行う必要があります。

カスタム パネルの作成方法を確認する必要があります。このトピックに関するリソースはたくさんあります。個人的には、これは適切でシンプルなチュートリアルだと思います。

于 2010-09-10T11:08:54.370 に答える
0

ActualHeight は正しいプロパティですが、それを読んでいる時点では高さはまだ計算されていません。

このリンクに従って、カスタム レイアウト パネルを作成する推奨方法を確認してください: http://www.wpftutorial.net/CustomLayoutPanel.html

于 2010-09-10T11:08:03.657 に答える