我遇到的问题是Blend没有在DataTemplate样式中渲染项目。
我已经设置了一个基本项目来复制问题。下面是那些有鹰眼的人的Xaml + ResourceDictionary,看看我做错了什么(如果有的话),如果你真的热衷于下面的Zipped项目的链接。
这是运行应用程序时呈现的内容:
这就是Blend提出的:
<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可能有问题,但没有具体的。
有任何想法/建议吗?
谢谢!
编辑:
我发现如果我给我的样式一个Explicit Key,我可以根据Explicit创建一个Implicit Style,如下所示:
<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>
这将为我提供我在主项目中需要的可混合性,但仍然不能完全回答我原来的问题。
答案 0 :(得分:1)
首先,Blend是用WPF和XAML编写的。 所以Blend有自己的应用程序风格,并且你的应用程序也定义了全局样式,为了不合并它们,它们将以不同的方式应用它们,并且它们用于应用这些样式的方法可能存在错误。
我猜这是为什么会这样。 但它并没有解决问题,但可能会帮助您找到其他解决方法。