【问题标题】:Expression Blend, an ItemTemplate and an Implicit StyleExpression Blend、ItemTemplate 和隐式样式
【发布时间】:2011-05-27 10:41:35
【问题描述】:

我遇到了一个问题,Blend 没有在隐式样式的 DataTemplate 中呈现项目。

我已经设置了一个基本项目来复制该问题。下面是 Xaml + ResourceDictionary 供那些有老鹰眼的人看看我做错了什么(如果有的话),如果你真的很热衷于下面的压缩项目的链接。

这是应用程序运行时呈现的内容:

这就是 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 可能有问题但没有具体问题的 cmets。

有什么想法/建议吗?

谢谢!

编辑:

我发现,如果我给我的样式一个显式键,我可以像这样基于显式创建一个隐式样式:

<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>

这将为我提供我在主项目中需要的可混合性,但仍然不能完全回答我最初的问题。

【问题讨论】:

  • +1 对于一个结构良好的问题:)

标签: wpf xaml expression-blend implicit-style


【解决方案1】:

首先,Blend 是用 WPF 和 XAML 编写的。 因此,Blend 有自己的应用程序样式,并且由于您的应用程序还定义了全局样式,因此为了不合并它们,它将以不同的方式应用它们,并且它们用于应用这些样式的方法中可能存在错误。

这就是我猜为什么会发生这种情况。 虽然它并不能解决问题,但可能会帮助您找到其他解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多