WPF:如何将Unicode字符转移至共享资源?

5

我有这个XAML:

<TextBlock Text="Message with unicode char: &#x24D8;"/>

有没有一种方法能够将该Unicode字符 &#x24D8; 转移到共享资源(例如常量或StaticResource)中?

我尝试过的方法

方法1

这个方法可以正常工作,但需要有效的绑定才能使用:

<Grid>
    <Grid.Resources>
        <system:String x:Key="ToolTipChar">{0} &#x24D8;</system:String>
    </Grid.Resources>
    <TextBlock Text="{Binding MyText, StringFormat={StaticResource ToolTipChar}}"/>
</Grid>

在代码后台:

public string MyText { get; set; } = "Message with unicode char: ";    

方法二

这个方法看起来似乎可行,但是没有成功:

<Grid>
    <Grid.Resources>
        <system:String x:Key="ToolTipChar">{0} &#x24D8;</system:String>
    </Grid.Resources>
    <TextBlock Text="{Binding Nothing, FallbackValue='Message with unicode char: ', StringFormat={StaticResource ToolTipChar}}"/>
</Grid>

你为什么还没有做呢?你有遇到任何错误吗? - nvoigt
如果文本中有 {Binding},我可以使用 StringFormat={StaticResource ToolTipChar},但如果文本没有绑定,我尝试过的任何方法都似乎不起作用。 - Contango
没错,我认为没有(简单、官方、非hacky的)方法可以在没有绑定的情况下实现这一点。 - nvoigt
3个回答

7
如果我理解你的问题正确,那么这个应该可以工作:
<Window.Resources>
    <s:String x:Key="ToolTipChar">{0}&#x24D8;</s:String>
</Window.Resources>
...
<TextBlock Text="{Binding Source='Message with unicode char:', StringFormat={StaticResource ToolTipChar}}" />

2
这也可以起作用:
<Window.Resources>
    <system:String x:Key="ToolTipChar">&#x24D8;</system:String>
</Window.Resources>
...
<TextBlock Text="{Binding StringFormat='Message with unicode char: {0}', 
                          Source={StaticResource ToolTipChar}}" />

我觉得把替换标记直接放在string资源中,相比之下,这种写法更易读、更易理解。


2

另一种不涉及绑定的替代方法是使用TextBlock.Inlines

<my:String x:Key="TooltipSign">&#x24D8;</my:String>

<TextBlock HorizontalAlignment="Right" Margin="10">
    <Run Text="Message with unicode char:"/>
    <Run Text="{StaticResource TooltipSign}" 
         FontWeight="Bold" Foreground="Orange" Background="Black"/>
</TextBlock>

TextBlock.Inlines是的内容属性,因此可以省略<TextBlock.Inlines>标签。Inlines提供了额外的装饰选项,比如给文本染色:

screenshot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接