2014-09-01 5 views
5

Ich weiß, wie die Columndefinition in XAML funktioniert, aber ich möchte etwas tun und weiß nicht wie.XAML Columndefinitionsbreite * nicht verfügbares Leerzeichen

Ich möchte vier Spalten wie folgt aus:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="110" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="80" /> 
    <ColumnDefinition Width="80" /> 
</Grid.ColumnDefinitions> 
  1. Säule hat eine feste Breite
  2. Spalte alle verfügbaren Platz nehmen muss (ja, es ist zwischen den Säulen und das ist genau das Problem)
  3. Spalte hat feste Breite
  4. Spalte hat feste Breite

Die zweite Spalte enthält Text und das Problem ist, dass wenn der Text zu kurz ist, die zweite Spalte nicht den gesamten verfügbaren Platz belegt. es wird automatisch kleiner und dies für jede Zeile. Ich kann es mit diesem Code in dem Textblock funktioniert:

MinWidth="2000" 

Aber es ist nicht die gute Art und Weise, da diese Zahl zu niedrig sein könnte, wenn der Bildschirm groß ist.

sich hier die ganze Listenansicht die vier Spalten enthält:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="110" /> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="80" /> 
        <ColumnDefinition Width="80" /> 
       </Grid.ColumnDefinitions> 
       <Image Height="110" Width="110" Grid.Column="0" Source="{Binding blabla}" HorizontalAlignment="Stretch" /> 
       <TextBlock Text="{Binding blabla}" TextWrapping="Wrap" Margin="5,0,0,0" Grid.Column="1" FontSize="16" HorizontalAlignment="Stretch" TextAlignment="Left" FlowDirection="LeftToRight" MinWidth="2000" VerticalAlignment="Center" ScrollViewer.HorizontalScrollBarVisibility="Disabled" FontStretch="UltraCondensed"/> 
       <TextBlock Grid.Column="2" TextWrapping="Wrap" Foreground="Black" Margin="5,0,0,0" HorizontalAlignment="Stretch" VerticalAlignment="Center"/> 
       <Image Source="{Binding blabla, Converter={StaticResource ImgConverter}}" Grid.Column="3" Width="76" Height="76" HorizontalAlignment="Center" Stretch="None" VerticalAlignment="Center" Margin="0"/> 
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

Überprüfen Sie tatsächlich Ihre Elternsteuerbreite. Das wird nicht auf die volle Breite eingestellt, die Sie erwartet haben. – loop

+0

Was meinst du? Welche Elternkontrolle? – XHotSniperX

+0

Entschuldigung nicht in der Lage es deutlich auszudrücken. Aber können Sie nur untersuchen, wie viel Fläche Sie in Designer mit Grid einnehmen? – loop

Antwort

8

Ihr Layout ist gut definiert, aber verpasst eine kleine Sache, die verursacht wird, dass der Inhalt des ListViewItem nach links margined ist, denn das ist Definiert im Standard ListViewItemStyle mit dem Namen "ItemContainerStyle" für das ListView Control.

Alles was Sie tun müssen, ist dieses ListViewItemStyle hinzufügen, die ich geändert habe horizontal und vertikal über alle zur Verfügung stehenden Platz für den Artikel Ihrer Ressourcen

<Style x:Key="StretchedListViewItemStyle" 
      TargetType="ListViewItem"> 
     <Setter Property="HorizontalContentAlignment" 
       Value="Stretch" /> 
     <Setter Property="VerticalContentAlignment" 
       Value="Stretch" /> 
</Style> 

Dann legen Sie es als der ItemContainerStyle den Inhalt strecken für die ListView wie folgt:

<ListView Grid.Row="1" Grid.ColumnSpan="4" ItemsSource="{Binding blabla}" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" ItemContainerStyle="{StaticResource StretchedListViewItemStyle}"/> 
+0

Wow, du hast es gefunden! Wusste nicht, dass listview so gestylt wurde. Vielen Dank! – XHotSniperX

+0

Gern geschehen :) –

Verwandte Themen