2013-05-17 24 views
9

Ho un problema con il mio ListBoxItem su un'app di Windows Phone 8, mentre provavo a farli allungare su tutta la larghezza dello ListBox.ListBoxItem HorizontalContentAlignment da estendere su tutta la larghezza di ListBox

mio ListBox:

<ListBox 
     ItemsSource="{Binding Events}" 
     behaviors:ItemClickCommandBehavior.Command="{Binding EventSelectedCommand}" 
     ItemTemplate="{StaticResource EventListTemplateSelector}"/> 

E i suoi DataTemplates sono in un file di risorse XAML separato:

<DataTemplate x:Key="EventListHeaderTemplate"> 
    <Border HorizontalAlignment="Stretch"> 
     <Grid Height="50"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="6*"/> 
      </Grid.ColumnDefinitions> 
      <Image Grid.Column="0" Source="{Binding ImageUri}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="30"/> 
      <TextBlock Grid.Column="1" Text="{Binding SomeText}" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="Black"/> 
     </Grid> 
    </Border> 
</DataTemplate> 

non posso ottenere gli elementi per davvero Stretch, e non so dove sia il problema. Ho provato a impostare loHorizontalCOntentAlignment = "Stretch" e non ha funzionato. Ho provato molte altre combinazioni e sembra che solo impostando la larghezza del bordo o della griglia su una costante funzioni e un'altra soluzione che funziona sia quella di impostare la larghezza del bordo per legarsi alla larghezza effettiva del ListBox che lo contiene, ma voglio usare lo stretching variante se potesse farlo funzionare.

+1

Verifica questo Q: [Come ottenere ListBox ItemTemplate per allungare orizzontalmente l'intera larghezza del ListBox?] (Http://stackoverflow.com/questions/838828/how-to-get-a-listbox-itemtemplate- per allungare-orizzontalmente-la-larghezza-completa-del- –

risposta

22

Mi sono imbattuto nello stesso mentre sviluppavo un'applicazione commerciale WP8 e mi ha fatto impazzire chiedendomi perché il mio TextBlock non fosse completamente colorato in tutta la larghezza.

Il modo di lavorare con gli stili in competizione (questo funziona per qualsiasi delle varianti XAML in realtà) è quello di definire lo stile della ListBoxItem esplicitamente per gestire l'utilizzo dello spazio.

che dà il XAML un suggerimento che è compilare (tratto) per l'area dello schermo in questo modo:

<ListBox Name="lbTest" HorizontalContentAlignment="Stretch" > 

     <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="HorizontalContentAlignment" 
         Value="Stretch"/> 
      </Style> 
     </ListBox.ItemContainerStyle> 

     <ListBox.ItemTemplate>...</ListBox.ItemTemplate> 

In caso contrario il parser XAML, per impostazione predefinita, cerca di risparmiare spazio per auto ridimensionandolo al contenuto di ListBoxItem; dandogli quel terribile aspetto del nastro adesivo.

+0

Si tratta di un bug creato da Microsoft? Ho perso tre ore finché non ho trovato il tuo post. Grazie. – Dummy

+1

@Dummy è semplicemente una catena di stili predefiniti che nei controlli indipendenti ha senso, ma una volta uniti ci danno questo .... Benvenuti nel club che ha trovato questo stile Easter Egg. ;-) – OmegaMan

Problemi correlati