2012-11-28 74 views
4

我有一個DataTemplate,我使用我的WPF應用程序中 -繼承/支持算法FMP的DataTemplate

<DataTemplate x:Key="mattersTemplate"> 
    <Border Name="border" BorderBrush="Aqua" BorderThickness="1" Padding="5" Margin="5"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Row="0" Grid.Column="0" Text="FileRef:"/> 
      <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FileRef}" /> 
      <TextBlock Grid.Row="1" Grid.Column="0" Text="Description:"/> 
      <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/> 
      <TextBlock Grid.Row="2" Grid.Column="0" Text="Priority:"/> 
      <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/> 
     </Grid> 
    </Border> 
</DataTemplate> 

然後我(在DocumentSetTemplateSelector類)確定要使用的模板;

我想要做的/知道的是; 創建4個其他模板,它們將繼承此模板,然後允許某些屬性被覆蓋;

一個例子(這個模板繼承了上面的類) - 所以它們看起來是一樣的;

<DataTemplate x:Key="documentSet_Accounting"> 
    <ContentPresenter Content="{Binding mattersTemplate}" 
     ContentTemplate="{StaticResource mattersTemplate}"> 
    </ContentPresenter> 
</DataTemplate> 

我想要有一個樣式附加到此(如果可能),以獲得此效果;

<DataTemplate x:Key="documentSet_Accounting"> 
    <ContentPresenter fontsize="20" Content="{Binding mattersTemplate}" 
     ContentTemplate="{StaticResource mattersTemplate}"> 
    </ContentPresenter> 
</DataTemplate> 

<DataTemplate x:Key="documentSet_Accounting"> 
    <ContentPresenter Style="AccountingStyle" Content="{Binding mattersTemplate}" 
     ContentTemplate="{StaticResource mattersTemplate}"> 
    </ContentPresenter> 
</DataTemplate> 
+0

可能重複http://stackoverflow.com/questions/4443600/is-there-a-way-to-use-data -template-inheritance-in-wpf) –

+0

有什麼問題? –

+0

問題是,我不確定如何添加一個「樣式」到documentSet_Accounting模板(以便例如,在該模板中的字體大小)會不同...(如果我沒有問清楚,那麼appoligies – Hexie

回答

1

如何使用模板,而不是模板繼承中風格的傳承?

<Style x:Key="mattersTemplateStyle"> 
    <Setter Property="TextBlock.Foreground" Value="Green"/> 
</Style> 
<Style x:Key="documentSet_AccountingStyle" BasedOn="{StaticResource mattersTemplateStyle}"> 
    <Setter Property="TextBlock.FontSize" Value="20"/>    
</Style> 
<DataTemplate x:Key="mattersTemplate"> 
    <Border Name="border" BorderBrush="Aqua" BorderThickness="1" Padding="5" Margin="5"> 
     <Grid Style="{StaticResource mattersTemplateStyle}"> 
      [...] 
     </Grid> 
    </Border> 
</DataTemplate> 
<DataTemplate x:Key="documentSet_Accounting"> 
    <Grid Style="{StaticResource documentSet_AccountingStyle}"> 
     <ContentPresenter Content="{Binding mattersTemplate}" ContentTemplate="{StaticResource mattersTemplate}"></ContentPresenter> 
    </Grid> 
</DataTemplate> 
的[有沒有在WPF中使用數據模板繼承的方式?(
+0

嗨斯蒂芬, 這似乎是在正確的道路上 - 謝謝。 我在找什麼是同樣的事情,但我想更改網格內的單個屬性,而不是設置整個網格的樣式。 ie 此網格當前加載5個條目(來自靜態類),其中一個文本框包含名爲DocumentSet的字段,我試圖使所有值符合相同的網格外觀,但取決於DocumentSet值(即「會計」)僅更改字體顏色。 – Hexie

+0

嗨@Hexie對不起,這已經有一段時間了,你還在看這個問題嗎?我不確定在documentSet_Accounting模板中的Grid上設置樣式與直接在內容演示者上設置字體大小之間的區別。我以爲這兩種操作都會做同樣的事情?在我上面的例子中,* all *你的documentSet顯示有一個綠色的前景色(這是「base」風格的一部分),而只有值爲「Accounting」的documentSet的字體大小爲20,派生「風格。 –