2013-12-20 75 views
0

我有一個ItemsControl它有很多列和一個靜態標題行。我知道HeaderedItemsControl但我不確定它能達到我想要的。控件模板和項目模板之間的itemscontrol共享網格

我現在擁有的是ControlTemplate作爲標題和ItemsPresenter的容器,然後ItemTemplate用於組織記錄。

目前我在內容和項目模板中都有一個重複的網格,我想找到一個優雅的解決方案,我可以在兩個模板之間共享同一個網格,所以我不必更改兩件事情當編輯它時。模擬它下面的樣子,實際的控制有更多的列。我讀過有關IsSharedSizeScopeSharedSizeGroup,但我推測這是行不通的,因爲它只有函數時,有兩個網格共享一個父元素(他們都需要爲控件模板內)

<ItemsControl ItemsSource="{Binding SomeSource}"> 
    <ItemsControl.Template> 
     <ControlTemplate TargetType="ItemsControl"> 
      <StackPanel> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <TextBlock Grid.Column="0" Text="Col1" /> 
        <TextBlock Grid.Column="1" Text="Col2" /> 
        <TextBlock Grid.Column="2" Text="Col3" /> 
       </Grid> 
       <ItemsPresenter/> 
      </StackPanel> 
     </ControlTemplate> 
    </ItemsControl.Template> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
        <ColumnDefinition /> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="ItemCol1" /> 
       <TextBlock Grid.Column="1" Text="ItemCol2" /> 
       <TextBlock Grid.Column="2" Text="ItemCol3" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

我已經可能做了一些不好的練習,所以隨時給我指點。

回答

0

我有一種感覺,你設置ItemsSource的值完全錯誤。

它應該是這樣的:

<ItemsControl ItemsSource="{Binding SomeSource}"> 

當我拿你的榜樣,並運行它正常工作對我來說。

如果您希望共享列大小,那麼您可以使用SharedSizeGroup。您必須將範圍設置爲ItemsControl。

您得到了SharedSizeGroup的錯誤定義。無論網格放置在何處,只要它們共享父母中的一個,它就可以工作。這是你的情況,因爲ItemsControl是最頂級的控件,所以它是每個控件的父級。

+0

我會給它一個鏡頭,是的,我編輯的例子,當我在響應,綁定是它實際上就像我會改變這一點。我可以刪除其中一個網格的標籤嗎? – pgwri