2016-08-26 1 views
1

Ich möchte die Höhe des Steuerelements abrufen, das in DataTemplate geladen wird, wenn die Breite auf 100 festgelegt ist. Ich habe den folgenden Code verwendet, aber gibt immer die Größe 0,20 zurück. Irgendwelche Vorschläge dazu?Wie berechnet man die Höhe eines Steuerelements, das in DataTemplate geladen wird?

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

Antwort

0

Ich habe den Code unten verwendet, aber immer gibt die Größe 0,20. Irgendwelche Vorschläge dazu?

Dies ist, weil Sie nicht Ihre ContentControl auf das Layout machen haben, können Sie es zum Beispiel so machen kann:

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; 

Dann jetzt, können Sie die Größe Ihrer ContentControl bekommen können, durch meine Seite ist es 94.100.

Ich bin nicht sicher, dass diese Größe ist die, die Sie tatsächlich wollen, von Ihrem Titel, möchten Sie die Höhe eines Steuerelements, das in DataTemplate geladen wird, aber diese Größe ist die Größe von ContentControl, ich denke, was Sie brauchen ist die Höhe der Grid oder TextBlock innerhalb dieser ContentControl. Um diese beiden Regler können Sie wie folgt Code nach dem ContentControl vollständig wiedergegeben wird:

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

Und darüber im Klaren sein, dass die DesiredSize ist nicht die gerenderte Größe der Steuerung, können Sie auf die Bemerkungen Teil UIElement.DesiredSize property beziehen.

Verwandte Themen