如何在 DataTemplate 中为其类型发出(枚举)值的字符串表示形式?

How can I emit the string representation of a (enum) value inside a DataTemplate for its type?

我创建了一个 DataTemplate 来表示 enum 作为图标(灵感来自 this answer):

<DataTemplate DataType="{x:Type enums:EntryType}">
    <Control x:Name="EntryTypeControl"
             ToolTip="{Binding}" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Static enums:EntryType.Debug}">
            <Setter TargetName="ItemTypeControl" Property="Template" Value="{StaticResource DebugGlyph}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static enums:EntryType.Info}">
            <Setter TargetName="ItemTypeControl" Property="Template" Value="{StaticResource InfoGlyph}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static enums:EntryType.Warn}">
            <Setter TargetName="ItemTypeControl" Property="Template" Value="{StaticResource WarningGlyph}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static enums:EntryType.Error}">
            <Setter TargetName="ItemTypeControl" Property="Template" Value="{StaticResource ErrorGlyph}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding}" Value="{x:Static enums:EntryType.Fatal}">
            <Setter TargetName="ItemTypeControl" Property="Template" Value="{StaticResource FatalGlyph}" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

除工具提示外,这一切正常:我真的很想显示枚举的原始字符串表示形式(即,如果没有 DataTemplate,我会得到什么)。然而,真正发生的是工具提示再次显示图标。我如何说服模板不引用自身?

显然,如果我为 DataTemplate 分配一个专用的 x:Key 并明确引用它,这会起作用,但是如果不这样做,这也可能吗?

您可以将 TextBlock 添加到 ToolTip:

<Control x:Name="EntryTypeControl">
    <Control.ToolTip>
        <ToolTip>
            <TextBlock Text="{Binding}" />
        </ToolTip>
    </Control.ToolTip>
</Control>