2012-03-02 82 views
0

我有任意計數的ViewModels顯示,我希望ViewModels顯示在兩列。第一列大多應顯示名稱/說明,第二列的內容各不相同。我更喜歡Grid樣佈局,第一列爲Width = "auto",第二列爲Width = "*"應該選擇哪個ItemControl?爲什麼?

我試了ListViewGridView,但有一些缺陷。

  • 我可以選擇ListViewItem S(非必要)
  • GridViewColumns有頭(浪費的空間/沒有必要)
  • GridViewColumns不支持Width = "*"Grid,因此不使用所有可用空間

我可以用一個Grid,但比我必須添加Grid.RowDefinitions爲每個視圖模型和不可能設置Grid.Row通過綁定屬性。

我也想過使用StackPanel,但不支持模板,我不知道如何同步第一列的Width

那麼,有沒有人知道哪個ItemControl最適合這個目的?

回答

1

沒有測試它,我期望一個ItemsControl與數據模板是一個合適的解決方案。 您可以在父元素(本例中爲ItemsControl)上使用Grid.IsSharedSizeScope =「true」,然後使用SharedSizeGroup =「somename」同步第一列的寬度。

<Grid> 
    <Grid.Resources> 
     <DataTemplate x:Key="itemTemplate" DataType="{x:Type MyItemType}"> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition SharedSizeGroup="column1" Width="Auto"/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding Title}"/> 

       <!-- More stuff here --> 
      </Grid> 
     </DataTemplate> 
    </Grid.Resources> 
    <ItemsControl Grid.IsSharedSizeScope="True" ItemTemplate="{StaticResource itemTemplate}" /> 
</Grid> 
+0

爲什麼我總是忘了,像'ShardeSizeGroup'和'IsSharedSizeScope'存在?多謝。 – 2012-03-02 12:43:04

1

我會用一個列表框以網格爲模板是這樣的:

<ListBox ItemsSource="{Binding SomeData}" HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto" /> 
          <ColumnDefinition Width="*" /> 
         </Grid.ColumnDefinitions> 
         <TextBlock Text="{Binding Data1}" Grid.Column="0"></TextBlock> 
         <TextBlock Text="{Binding Data1}" Grid.Column="1"></TextBlock> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
相關問題