2012-06-13 72 views
5

我想製作一個簡單的ListBox。每行應包含2個控件,一個對齊左邊,另一個右邊,這就是所有:) 我嘗試了多種方法,但沒有任何工作。我的代碼如下C#windows phone -xaml中的對齊ListBox.ItemTemplate

<StackPanel Grid.Row="1" Margin="12,0,12,0" Grid.Column="0"> 
     <ListBox Name="ListBox" Margin="12,0,12,0" ItemsSource="Exercises" HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal" Width="> 
         <TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
         <TextBlock Text="def" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </StackPanel> 

(二的TextBlocks只是爲了演示,在實際應用中,我想一個文本塊結合,而不是第二個病人使用按鈕,真實的數據。) 生病時編譯此,無論是textblock在左邊對齊,在仿真器中,它看起來像是一個帶有文本「abcdef」的文本塊。 任何想法如何對齊一個文本塊的權利和另一個左邊? 非常感謝:)

+0

只是要清楚,你想要的控件左對齊,右或他們的*內容*左對齊或右對齊? – CodingGorilla

+0

像喜歡控制對齊到左側和右側:) – user1453857

回答

16

默認情況下,ListBoxItem不填充它給出的空間。它將自身與內容對齊。爲了確保您的ListBoxItem的內容橫跨整個寬度,您需要更改ItemContainerStyle

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

現在的內容將跨越可用寬度。如果你希望像你的例子那樣使用StackPanel,請確保將它設置爲Horizo​​ntalAlignment。該StackPanel中也沒有給出

<DataTemplate> 
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 
     <TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
     <TextBlock Text="def" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
    </StackPanel> 
</DataTemplate> 

但是可用的空間填滿,我會建議使用一個網格,並確定兩列

<DataTemplate> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Text="abc" HorizontalAlignment="Left" VerticalAlignment="Center"/> 
     <TextBlock Text="def" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center"/> 
    </Grid> 
</DataTemplate> 
+0

謝謝你,「網格方法」的作品:)你甚至不需要使用 user1453857

+0

我使用MaterialDesign和MahApps,當我改變ItemContainerStyle我失去這些庫提供的自定義樣式,我認爲它完全重置ListBox樣式,無論如何,我可以保留自定義樣式,而只更改該屬性? –

+0

風格最有可能有一個關鍵,你可以用它來擴展風格