2

我有一些为项目DatTrigger设置文本颜色的 s 。ListView如果我使用TextBoxItemTemplateListView它会完美运行。但如果我使用TextBlock.

这段代码:

<Style TargetType="TextBox">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Level,Mode=OneWay}"
                     Value="{x:Static Common:LoggingLevel.Error}">
            <Setter Property="Foreground"
                    Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Level,Mode=OneWay}"
                     Value="{x:Static Common:LoggingLevel.Warning}">
            <Setter Property="Foreground"
                    Value="Orange" />
        </DataTrigger>
    </Style.Triggers>
</Style>

...

<ListView ItemsSource="{Binding Entries}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Text,Mode=OneWay}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

生成正确颜色的消息列表。

虽然这段代码:

<Style TargetType="TextBlock">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Level,Mode=OneWay}"
                     Value="{x:Static Common:LoggingLevel.Error}">
            <Setter Property="Foreground"
                    Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Level,Mode=OneWay}"
                     Value="{x:Static Common:LoggingLevel.Warning}">
            <Setter Property="Foreground"
                    Value="Orange" />
        </DataTrigger>
    </Style.Triggers>
</Style>

...

<ListView ItemsSource="{Binding Entries}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Text,Mode=OneWay}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

使用默认的黑色前景色呈现所有消息。

4

2 回答 2

4

隐式样式在模板中应用于继承自的元素,System.Windows.Controls.Control因为TextBlock直接继承自FrameworkElement它将不适用。为了使它工作,你必须Style x:Key明确地给你的风格和分配风格,或者在UPDATETextBlock中定义你的风格:我还应该提到,为了涵盖这个主题,有一种方法可以将隐式应用于所有. 如果你把它放进去,它将适用于整个应用程序的所有内容。在这种情况下,它会导致一些主要的性能问题和潜在的其他错误,这可能是微软决定保护这些基本元素不被意外使用复杂、隐式样式的原因。不是每个人都意识到,基本上你看到的每一段文字TextBlock


StyleTextBlocksApplication.ResourcesTextBlocksWindow结束为TextBlock.

于 2013-06-08T21:08:34.220 回答
0

提供密钥并使用如下所示Style应用它:TextBlock

<Style TargetType="TextBlock" x:Key="txtID">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Level,Mode=OneWay}" Value="{x:Static Common:LoggingLevel.Error}">
            <Setter Property="Foreground" Value="Red" />
        </DataTrigger>

        <DataTrigger Binding="{Binding Level,Mode=OneWay}" Value="{x:StaticCommon:LoggingLevel.Warning}">
            <Setter Property="Foreground" Value="Orange" />
        </DataTrigger>
    </Style.Triggers>
</Style>

<ListView ItemsSource="{Binding Entries}">
     <ListView.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Text,Mode=OneWay}" Style="{DynamicResource txtID}"/>
         </DataTemplate>
     </ListView.ItemTemplate>
</ListView>
于 2013-06-09T05:36:44.020 回答