2013-05-17 19 views
9

Ich habe ein Problem mit meiner ListBoxItem ist auf einer Windows Phone 8 App, während Sie versuchen, sie über die gesamte Breite der ListBox zu dehnen bekommen.ListBoxItem HorizontalContentAlignment über die volle Breite von ListBox

Mein ListBox:

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

Und seine Datatemplates sind in einem separaten XAML-Ressource-Datei:

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

Ich kann nicht die Einzelteile wirklich Stretch bekommen, und ich weiß nicht, wo das Problem ist. Ich habe versucht, die ItemContainerStyle HorizontalCOntentAlignment = "Stretch" einzustellen und es hat nicht funktioniert. Ich habe viele andere Kombinationen ausprobiert und es scheint, dass nur die Border- oder Grid-Breite auf eine Konstante zu setzen und eine andere Lösung, die funktioniert, ist, die Border-Breite an die ActualWidth der ListBox zu binden, aber ich möchte Stretch verwenden Variante, wenn es funktionieren könnte.

+1

Aktivieren Sie dieses Frage: [Wie bekomme ich ein ListBox ItemTemplate, um horizontal die volle Breite der ListBox zu strecken?] (Http://stackoverflow.com/questions/838828/how-to-get-a-listbox-itemtemplate- zu-strecken-horizontal-die-volle-Breite-) –

Antwort

22

Ich lief in die gleiche während der Entwicklung einer kommerziellen WP8 App und es fuhr mich verrückt fragen, warum meine TextBlock wurde nicht über die Breite vollständig gefärbt.

Die Art und Weise mit den konkurrierenden Arten zu arbeiten (dies für eine der XAML arbeitet Varianten tatsächlich) ist Stil der ListBoxItem explizit die Raumnutzung zu handhaben zu definieren.

dass der XAML ein Hinweis gibt, dass es (Strecke) auf den Bildschirmbereich auf diese Weise zu füllen ist:

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

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

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

Andernfalls wird der XAML-Parser, versucht standardmäßig, um Platz zu sparen durch Auto Größenanpassung an den Inhalt der ListBoxItem; gab ihm den gefürchteten Scotch Tape Look.

+0

Ist das ein Fehler von Microsoft? Ich habe drei Stunden verschwendet, bis ich deinen Posten gefunden habe. Vielen Dank. – Dummy

+1

@Dummy Es ist einfach eine Kette von Standard-Stilen, die in Stand-Alone-Kontrollen Sinn machen, aber wenn zusammen gebracht geben Sie uns dies .... Willkommen im Club, der dieses Stil Osterei gefunden. ;-) – OmegaMan