2011-05-27 60 views
4

我遇到Blend問題,無法在DataTemplate樣式隱式中呈現項目。Expression Blend,ItemTemplate和隱式樣式

我已經設置了一個基本項目來複制這個問題。下面是Xaml + ResourceDictionary對於那些用鷹眼來看看我做錯了什麼(如果有的話)以及如果你真的熱衷於鏈接到下面的壓縮項目。

這是當應用程序運行呈現什麼:

Expected Output

,這就是混合禮物:

Blend Rendered

<Color x:Key="TextColor1">#FF3631C4</Color> 

<Style TargetType="{x:Type TextBlock}"> 
    <Setter Property="TextWrapping" Value="NoWrap"/> 
    <Setter Property="TextTrimming" Value="None"/> 
    <Setter Property="Foreground"> 
     <Setter.Value> 
      <SolidColorBrush Color="{DynamicResource TextColor1}"/> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Canvas x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource SampleDataSource}}"> 
    <TextBlock Text="Textblock" Canvas.Left="44.954" Canvas.Top="49.305" /> 
    <TextBlock Text="Textblock 2" Canvas.Left="44.954" Canvas.Top="86.284" /> 
    <ListBox ItemsSource="{Binding Collection}" Canvas.Left="134.016" Canvas.Top="29.026" Height="154.275" Width="384.575"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Property1}" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Canvas> 

Complete Example Project (65kb) - WpfApplication2.zip

問題當然可以通過顯式地設置樣式來解決,但在我的主要項目,這將導致一個有點頭疼。

我在Blend的其他文章中看到過一些評論可能有問題,但沒有具體。

有什麼想法/建議嗎?

謝謝!

編輯:

我發現,如果我給我的風格顯式的關鍵字,然後我就可以創建基於明確的,像這樣的隱式風格:

<Style x:Key="TextBlockStyle1" TargetType="{x:Type TextBlock}"> 
    <Setter Property="TextWrapping" Value="NoWrap"/> 
    <Setter Property="TextTrimming" Value="None"/> 
    <Setter Property="Foreground"> 
     <Setter.Value> 
      <SolidColorBrush Color="{DynamicResource TextColor1}"/> 
     </Setter.Value> 
    </Setter> 
</Style> 

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStyle1}" /> 

這就給了我的能力,添加另一個隱式的資源在我的DataTemplate:

<DataTemplate> 
    <DataTemplate.Resources> 
     <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockStyle1}"></Style> 
    </DataTemplate.Resources> 
    <TextBlock Text="{Binding Property1}" /> 
</DataTemplate> 

這將然後給我的混合能力,我需要在我的主要項目,但到現在仍然不回答我的原點al問題。

+0

+1對於結構良好的問題:) – Vitalij 2011-11-09 23:27:11

回答

1

首先Blend是用WPF和XAML編寫的。 So Blend有它自己的應用程序樣式,並且由於您的應用程序還定義了全局樣式,爲了不合並它們,它們將以不同方式應用它們,並且可能存在應用這些樣式的方法中的錯誤。

這是我猜爲什麼會發生這種情況。 雖然它並未解決問題,但可能會幫助您找出其他解決方法。