3

私のプロジェクトには、ネストされたグリッドがたくさんあります。また、ほとんどの場合、行と列の幅はXAMLでは「*」として定義されています。

他の行の高さを0に設定して特定の行(たとえばRow1)を拡張しようとしていますが、.ActualHeightプロパティを使用してRow1の幅を取得していますが、実際の高さはわかりません。

私が知っているように、グリッドの行と列の高さと幅はレンダリング時間に設定されているため、これが発生しています。
私はネットで検索し、誰かがUpdateLayout()メソッドを使用することを提案しましたが、それも私には機能しません。
非常に長いコードであるため、コードスニペットを投稿できません。
c#.netwpfでの私のプロジェクト。

4

2 に答える 2

5

完全なレイアウト更新を行う必要があります。つまり、Measure、Arrange、およびUpdateLayoutを呼び出す必要があります。

    //Make the framework (re)calculate the size of the element
    _Element.Measure(new Size(Double.MaxValue, Double.MaxValue));
    Size visualSize = _Element.DesiredSize;
    _Element.Arrange(new Rect(new Point(0, 0), visualSize));
    _Element.UpdateLayout();

_ElementはFrameworkElementです(グリッドは1つです)。

于 2012-04-25T09:47:12.760 に答える
0

ヒヒの投稿に基づく解決策は私のために働いた。折りたたまれたFrameworkElementのスライドインをアニメーション化する必要がありました。これは、ActualHeight値がわからない場合の同様の問題です。

    element.Visibility = Visibility.Visible;
    element.InvalidateArrange();
    element.UpdateLayout();

    double elementHeight = element.DesiredSize.Height;
    DoubleAnimation animation = new DoubleAnimation(0, elementHeight, TimeSpan.FromMilliseconds(animMilisec));
    element.BeginAnimation(Rectangle.HeightProperty, animation);

これで、要素がレンダリングされる前に、その最終的な高さにアクセスできます。

于 2014-09-25T10:25:32.003 に答える