2014-04-09 40 views
1

我有一個ListBox有四列,放在我的網格的第二行,也包含4列。我使用Main網格的ColumnDefinitions在ListBox上放置四個標題,並且我需要放置在主網格的第1行中的ListBox根據我創建的標題具有匹配的ColumnWidth。如何格式列表框列寬

<Grid Margin="12,0,12,6"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="40"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 

       <TextBlock Text="One" Grid.Row="0" Grid.Column="0"/> 
       <TextBlock Text="Two" Grid.Row="0" Grid.Column="1"/> 
       <TextBlock Text="Three" Grid.Row="0" Grid.Column="2"/> 
       <TextBlock Text="Four" Grid.Row="0" Grid.Column="3"/> 

       <ListBox x:Name="HistoryListBox" Grid.Row="1" Grid.ColumnSpan="4"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width*"/> 
            <ColumnDefinition Width*"/> 
            <ColumnDefinition Width*"/> 
            <ColumnDefinition Width*"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Column="0" Text="{Binding One}"/> 
           <TextBlock Grid.Column="1" Text="{Binding Two}"/> 
           <TextBlock Grid.Column="2" Text="{Binding Three}"/> 
           <TextBlock Grid.Column="3" Text="{Binding Four}"/> 
          </Grid> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 

      </Grid> 

我在我的列表框中看到的所有數據都是混亂的數據,它們沒有被分成合適的列寬度以匹配上面的文本框。我怎樣才能解決這個問題?

+0

您應該將'ColumnDefinition Width =「40」'定義爲類似於數字的東西 – csharpwinphonexaml

+0

要使統一尺寸大於 – csharpwinphonexaml

+0

因爲屏幕大小可能會更改,所以列寬是可變的。 – Matthew

回答

1

也許這就夠了

<ListBox x:Name="HistoryListBox" Grid.Row="1" Grid.ColumnSpan="4"> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid HorizontalAlignment="Stretch"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="*"/> 
      </Grid.ColumnDefinitions> 

      <TextBlock Grid.Column="0" Text="{Binding One}"/> 
      <TextBlock Grid.Column="1" Text="{Binding Two}"/> 
      <TextBlock Grid.Column="2" Text="{Binding Three}"/> 
      <TextBlock Grid.Column="3" Text="{Binding Four}"/> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
+0

謝謝,仍然無法得到它。它看起來像一行文字,如'onetwothreefour',而不是分隔成列。 – Matthew

+0

@Matthew在Grid上檢查編輯Horizo​​ntalAlignment =「Stertch」 – csharpwinphonexaml

+1

我相信這個技巧!我將不得不玩弄它來正確對齊列。 – Matthew

0

當您使用ListBox.ItemTemplate這意味着你必須爲你的列表框的每個項目的網格。

如果您在每列上使用*,您將可用空間平均分配到列中,但每個元素仍有不同的網格。

如果您堅持使用Listbox.ItemTemplate方法,並且您將能夠爲每個列使用不同的大小,並仍然保持網格的「錯覺」,那麼我會建議使用Grid而不是ListBox或使用SharedSizeGroup屬性。

+0

本來我更喜歡使用網格,但我無法弄清楚如何滾動網格中的所有項目,並讓它自動生成更多的行,添加的項目越多。我的想法是在Scrollviewer中放置一個Grid來讓所有項目均勻滾動,但修改了新增加的行,並且在IsolatedStorage和同一個應用程序實例中使用這些內容看起來過於複雜。目前我正在使用自動更新用戶界面的ObservableCollection。如果您可以提供代碼建議,我很樂意看看它並對其進行測試。 – Matthew

+0

嘗試使用[DataGrid](http://wpftutorial.net/DataGrid.html) – user3489637