2017-09-21 6 views
-1

Ich habe eine ListBox, die ein Bild und einen Text darüber zeigt. Ich habe das DataTemplate an eine benutzerdefinierte MyImage-Klasse gebunden, die über eine Zeichenfolge Str und ein Image Image verfügt. Das nächste Bild würde rechts von dem ersten erscheinen, da das umgebende StackPanel horizontal ist.So binden Sie die Höhe an die Höhe des übergeordneten Elements abzüglich der Höhe eines anderen Elements

Ich habe Probleme, die Höhe des Bildes auf einen Wert, wo es die gesamte ListBox Höhe minus die Höhe und den Rand des Textes füllen würde. Im folgenden Code habe ich es an die ActualHeight der ListBox listboxMyImages gebunden. Ich möchte jetzt die Höhe des TextBlocks von diesem Wert subtrahieren können. Was ist der beste Weg, das zu tun?

enter image description here

<ListBox x:Name="listboxMyImages" Margin="10,10,10,10"> 
             <ListBox.ItemsPanel> 
              <ItemsPanelTemplate> 
               <StackPanel Orientation="Horizontal"/> 
              </ItemsPanelTemplate> 
             </ListBox.ItemsPanel> 
             <ListBox.ItemTemplate> 
              <DataTemplate DataType="{x:Type local:MyImage}"> 
               <StackPanel> 
                <TextBlock x:Name="lblMyImage" Margin="3" Text="{Binding Str}" /> 
                <Image Margin="3" Source="{Binding Image}" Height="{Binding ElementName=listboxMyImages, Path=ActualHeight }"/> 
               </StackPanel> 
              </DataTemplate> 
             </ListBox.ItemTemplate> 
            </ListBox> 

Antwort

0

Statt ein Stackpanel verwenden Sie könnten versuchen, ein Gitter wie folgt zu verwenden:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"> 
     <RowDefinition Height="Auto"> 
    </Grid.RowDefinitions> 
</Grid> 

Nicht sicher, ob es funktioniert, wie ich es jetzt nicht versuchen können.

0

Verwendung ein anderes Panel - Grid mit 2 Reihen

<Grid> 

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
</Grid.RowDefinitions> 

<TextBlock x:Name="lblMyImage" Margin="3" Text="{Binding Str}" /> 
<Image Grid.Row="1" Margin="3" Source="{Binding Image}"/> 

</Grid> 

Bild dehnen und nehmen alle verfügbaren Höhe

+0

, die tatsächlich das Bild auf seine ursprüngliche Größe streckt und macht mich in der List-Box nach unten scrollen. – tzippy

+0

Es scheint, dass Itemspanel StackPanel nicht begrenzte Höhe für Elemente erlaubt. Ich muss über Verbesserungen nachdenken – ASh

+0

Okay, danke! Lass es mich wissen, wenn du an etwas denkst. – tzippy

Verwandte Themen