2012-06-04 39 views
2

是否有一種方法可以在XAML中純粹聲明性地定義GridView?我看到的每個示例都在後面的代碼中定義了類別/組名稱值,然後每個項目都有一個標題/子標題。我真的想找出一種方法來做類似如下的事情:聲明式GridView在WinRT中的XAML中

<GridView 
    x:Name="itemGridView" 
    AutomationProperties.AutomationId="ItemGridView" 
    AutomationProperties.Name="Grouped Items" 
    Grid.Row="1" 
    Margin="0,-3,0,0" 
    Padding="116,0,40,46" 
    ItemTemplate="{StaticResource Standard250x250ItemTemplate}"> 

    <GridView.ItemsPanel> 
    <ItemsPanelTemplate>       
     <VirtualizingStackPanel Orientation="Horizontal"/> 
    </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 

    <GridView.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
     <DataTemplate> 
      <Grid Margin="1,0,0,6"> 
      <Button 
       AutomationProperties.Name="Group Title" 
       Content="{Binding Tag}" 
       Style="{StaticResource TextButtonStyle}"/> 
      </Grid> 
     </DataTemplate> 
     </GroupStyle.HeaderTemplate> 

     <GroupStyle.Panel> 
     <ItemsPanelTemplate> 
      <VariableSizedWrapGrid Orientation="Vertical" Margin="0,0,80,0"/> 
     </ItemsPanelTemplate> 
     </GroupStyle.Panel> 
    </GroupStyle> 
    </GridView.GroupStyle> 

    <GridView.Items> 
    <Grid x:Name="tab1" Tag="Tab 1" AutomationProperties.Name="Group Title" HorizontalAlignment="Left" Width="250" Height="250"> 
     <!-- Tab COntent --> 
    </Grid> 

    <Grid x:Name="tab2" Tag="Tab 2" AutomationProperties.Name="Tab 2" HorizontalAlignment="Left" Width="250" Height="250"> 
     <!-- Tab Content --> 
    </Grid> 
    </GridView.Items> 
</GridView> 

不幸的是,這個例子不起作用。我似乎無法弄清楚如何以聲明方式設置組名。感謝您的任何見解。

+0

您可以使用MVVM方法來做到這一點。如果你想要一個樣本,讓我知道。 – Krishna

+0

我有同樣的問題。使用綁定只能綁定到相同類型的對象;但是如果每組有不同的對象呢?你解決了這個問題嗎? –

回答

0

我認爲以下方法是定製任何Gridview的好方法。

*如果你想實現你的電網多組風格,請做好這項工作:

步驟1.創建一個GroupSelector類並覆蓋SelectStyleCore功能:

public class GroupStyleSelector : StyleSelector 
    { 
    public Style GroupStyle1 { get; set; } 
    public Style GroupStyle2 { get; set; } 

    protected override Windows.UI.Xaml.Style SelectStyleCore(object item, Windows.UI.Xaml.DependencyObject container) 
    { 

     var viewGroup = item as ICollectionViewGroup; 
     if (viewGroup != null) 
     { 
      //var groupModel = viewGroup.Group as YourGroupModel; 
      if (condition1) 
      { 
       return GroupStyle1; 
      } 
      else if (condition2) 
      { 
       return GroupStyle2; 
      } 
     } 
    } 
} 

第2步:在XAML資源,請添加以下代碼:

<Style x:Key="YourGroupStyle1" TargetType="GroupItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <!-- Add your custom layout here for Group style 1 --> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
    <Style x:Key="YourGroupStyle2" TargetType="GroupItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="GroupItem"> 
       <!-- Add your custom layout here for Group style 1 --> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<customstyle:GroupStyleSelector x:Key="GroupStyleSelector" 
           GroupStyle1="{StaticResource GroupStyle1}" 
           GroupStyle2="{StaticResource GroupStyle2}"/> 

customstyle鏈接到存儲GroupStyleSelector類的名稱空間。

第3步:如果您要自定義HeaderTemplate中請讓我知道,如果沒有用戶當前從微軟GridApp樣品GridView控件

將樣式選擇。

如果您想自定義一組每個項目的佈局,你也別simiar到GroupStyleSelector: 創建DataTemplateSeletor(從TemplateSelector繼承),然後分配給它的GridView控件

<GridView ItemTemplateSelector="{StaticResource ItemTemplateSelector}"> 
    <GridView.GroupStyle> 
     <GroupStyle ContainerStyleSelector="{StaticResource GroupStyleSelector}"> 
      <GroupStyle.HeaderTemplate .../> 
    </GridView.GroupStyle> 

希望我的指南清楚爲你。 如果有任何問題,請討論。