2012-04-25 12 views
1

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

他の行の高さを0に設定して特定の行を展開しようとしています.ActualHeightプロパティを使用してRow1の幅を取得してから実際の高さが得られません。

グリッドの行と列の高さと幅がレンダリング時間に設定されているため、私はそれが起こっていることを知っています。
私はネットで検索し、誰かがUpdateLayout()メソッドを使用するよう提案しましたが、それも私のために働いていません。
非常に長いコードなので、コードスニペットを投稿できません。
私のプロジェクトはC#.net wpfです。 FrameworkElementのを(グリッドが1である)であることレンダリング前のグリッド行の実際の高さを取得する方法

//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:

答えて

4

は、あなたはそれはあなたが、測定を呼び出す配置する必要があるとUpdateLayout、完全なレイアウトの更新を行う必要があります。

+0

チャームのように働いて、ありがとうございました – JohnChris

0

私はBaboon postに基づいた解決策を使用しました。私は、ActualHeightの値を知らないという似たような問題である、折りたたまれたFrameworkElementのスライドをアニメーション化する必要がありました。

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

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

関連する問題