2015-05-13 48 views
2

我正在爲windows phone 8.1/windows 8.1開發通用應用程序。我正在使用MVVM模式。我有動態數量的視圖模型中綁定到源的堆疊面板的表。一個堆疊面板是表中的一行。我怎樣才能使堆棧面板中的項目寬度相同?我知道IsSharedSizeScope,但這在通用應用程序的網格中不可用。通用應用程序中的動態表格

<ItemsControl Grid.Column="1" HorizontalAlignment="Stretch" 
      ItemsSource="{Binding PowerMaxiTableSource0, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
        <TextBlock Text="{Binding Text0}" /> 
       </Border> 
       <Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
        <TextBlock Text="{Binding Text1}" /> 
       </Border> 
       <Border Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
        <TextBlock Text="{Binding Text2}" /> 
       </Border> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Vertical" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 

因爲這是表我嘗試使用網格而不是stackpanels,但我無法使它工作。我試過這個解決方案wpf grid with dynamic columns。但是我最終得到了聚集在第0行第0列的項目,即使在綁定屬性中使用了正確的值。

任何幫助將不勝感激(甚至與網格解決方案)。

+0

是否有可能給所有的TextBlocks一個固定的寬度和使用TextTrimming屬性? – goobering

+0

那麼沒有固定的寬度會更好,因爲我需要覆蓋許多不同的屏幕尺寸,但我沒有看到任何其他方式。 – benderto

回答

2

StackPanel寬度是由它的孩子驅動的。它看起來像StackPanel中有3個孩子,這意味着它們不是動態生成的。您聲明只有堆疊面板的數量發生變化。如果您不反對使用Grid而不是StackPanel,那麼比以下代碼將起作用,因爲Grid將自動延伸(取所有可允許的寬度),並在該列寬度被指定的情況下動態緩衝該寬度給它的子節點作爲百分比:

<ItemsControl HorizontalAlignment="Stretch"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="33*"/> 
         <ColumnDefinition Width="33*"/> 
         <ColumnDefinition Width="33*"/> 
        </Grid.ColumnDefinitions> 
        <Border Grid.Column="0" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
         <TextBlock Text="{Binding Text0}" /> 
        </Border> 
        <Border Grid.Column="1" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
         <TextBlock Text="{Binding Text1}" /> 
        </Border> 
        <Border Grid.Column="2" Background="{Binding IsEnabled, Converter={StaticResource BackgroundConverter}}"> 
         <TextBlock Text="{Binding Text2}" /> 
        </Border> 
       </Grid> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
+0

謝謝它的作品近乎完美。但是有些時候寬度在某些單元格中是關閉的,但在我的情況下這是可以接受的,謝謝。 – benderto

相關問題