2016-08-26 6 views
1

幅が100に設定されている場合、DataTemplateに読み込まれるコントロールの高さを取得したいと思います。以下のコードを使用しましたが、サイズは常に0,20が返されます。これに関する提案はありますか?DataTemplateに読み込まれたコントロールの高さを計算するには?

<DataTemplate x:Name="dataTemplate"> 
    <Grid> 
    <TextBlock Text="{Binding Path=Name}" TextWrapping="Wrap"/> 
    </Grid> 
</DataTemplate> 

var record = new UserInfo() { Name = "ASKL ALASO DKADOLD ADKIKAM AMDKI ADKAI AKDKI" }; 
var contentControl = new ContentControl(); 
contentControl.Measure(new Size()); 
contentControl.Content = record; 
contentControl.ContentTemplate = App.Current.Resources["dataTemplate"] as DataTemplate; 
contentControl.Measure(new Size(100, Double.PositiveInfinity)); 
var size = contentControl.DesiredSize; 

答えて

0

私は以下のコードを使用しますが、常にサイズ0,20を返してきました。これに関する提案はありますか?

これは、あなたがレイアウトにあなたのContentControlをレンダリングしていなかったので、あなたはこのように、たとえば、それをレンダリングすることができます:今、その後

var record = new UserInfo() { Name = "ASKL ALASO DKADOLD ADKIKAM AMDKI ADKAI AKDKI" }; 

var contentControl = new ContentControl(); 
stackPanel.Children.Add(contentControl); //Add this ContentControl to the childeren collection of a StackPanel to show it 
//contentControl.Measure(new Size()); 
contentControl.Content = record; 
contentControl.ContentTemplate = App.Current.Resources["dataTemplate"] as DataTemplate; 
contentControl.Measure(new Size(100, Double.PositiveInfinity));    
var size = contentControl.DesiredSize; 

、あなたは私のことで、あなたのContentControlのサイズを取得することができますそれは94,100です。

私はこのサイズが実際にあなたが望むものであるかどうかわからない、あなたのタイトルから、DataTemplateでロードされるコントロールの高さを計算したいが、このサイズはContentControlのサイズだと思うGrid、またはの内にTextBlockの高さです。 ContentControlが完全にレンダリングされた後、この二つの制御を取得するには、次のようにコード化することができます。

var grid = contentControl.ContentTemplateRoot as Grid; 
var textblock = grid.Children.FirstOrDefault() as TextBlock; 

そしてDesiredSizeがコントロールのレンダリングサイズではないことに注意してください、あなたはUIElement.DesiredSize propertyの備考部分を参照することができます。

関連する問題