2014-09-01 13 views
5

Wiem, jak działa funkcja columndefinition w XAML, ale jest coś, co chcę zrobić i nie wiem jak.Szerokość kolumn XAML szerokość * brak dostępu do wolnej przestrzeni

Chcę 4 kolumny tak:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="110" /> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="80" /> 
    <ColumnDefinition Width="80" /> 
</Grid.ColumnDefinitions> 
  1. kolumna ma stałą szerokość
  2. kolumna musi wziąć całą dostępną przestrzeń (tak to jest między kolumnami i to jest właśnie problem)
  3. kolumna ma stałą szerokość
  4. kolumna ma ustaloną szerokość

Druga kolumna zawiera tekst, a problem polega na tym, że gdy tekst jest za krótki, druga kolumna nie zajmuje całego dostępnego miejsca. automatycznie maleje i to dla każdego rzędu. Mogę zrobić to praca z tym kodem w textblock:

MinWidth="2000" 

Ale to nie jest dobry sposób, ponieważ liczba ta może być zbyt niska, gdy ekran jest duży.

Oto cała ListView zawierający 4 kolumny:

<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

Rzeczywiście sprawdź szerokość kontroli nadrzędnej. To nie będzie ustawione na pełną szerokość, jakiej się spodziewałeś. – loop

+0

Co masz na myśli? jaka kontrola nad rodzicem? – XHotSniperX

+0

Niestety nie można tego wyraźnie wyrazić. Ale czy możesz po prostu zbadać, w jakim obszarze Siatka bierze udział w Projektancie. – loop

Odpowiedz

8

Twój układ jest dobrze zdefiniowane, ale brakowało mała rzecz, która powoduje, że zawartość Listviewitem jest depozytu zabezpieczającego w lewo, ponieważ jest to zdefiniowane w domyślnej liście ListViewItemStyle, która ma nazwę "ItemContainerStyle" dla kontrolki ListView.

Wszystko, co trzeba zrobić, to dodać ListViewItemStyle że mam zmodyfikowany, aby rozciągnąć zawartość poziomo i pionowo w poprzek całej dostępnej przestrzeni dla pozycji do zasobów

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

Następnie ustawić go jako ItemContainerStyle dla ListView w następujący sposób:

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

Wow, znalazłeś! Nie wiedziałem, że listview został tak zaprojektowany. Dziękuję Ci bardzo! – XHotSniperX

+0

Nie ma za co :) –

Powiązane problemy