C# Xaml中的静态字符串

C# Xaml中的静态字符串,c#,wpf,xaml,C#,Wpf,Xaml,我有一个包含一些静态信息的类,即: public static class MyApp { public static string Name = "Awesome App"; public static string Version = "1.0"; } 我想在我的应用程序中显示应用程序名称的任何地方使用这个字符串,我的问题是在一些地方有超过变量字符串 例如: <TextBlock Text="Awesome App running version 1.0"/>

我有一个包含一些静态信息的类,即:

public static class MyApp
{
    public static string Name = "Awesome App";
    public static string Version = "1.0";
}
我想在我的应用程序中显示应用程序名称的任何地方使用这个字符串,我的问题是在一些地方有超过变量字符串

例如:

<TextBlock Text="Awesome App running version 1.0"/>
我想我也可以有多个
TextBlock
s:

<TextBlock>
    <TextBlock Text="{StaticResource AppName}"/>
    <TextBlock Text=" running version "/>
    <TextBlock Text="{StaticResource AppVersion}"/>
<TextBlock>

2.使用具有静态属性的静态“strings”类:
公共静态类字符串
{
公共静态字符串ProductRunningVersion=>
$“{MyApp.Name}运行版本{MyApp.version}”;
}
在属性中使用
=>
是有意的-在测试时,我对一些静态变量的初始化顺序有问题。(有些是通过静态构造函数初始化的)


我不确定哪种方法更好。 方法一感觉更“合适”,但也很混乱。 方法二感觉更干净,但不像我习惯的WPF那样典型。还必须将字符串定义为
get
函数,而不是静态字符串,这会带来一定的成本吗


这两种方法有什么好处吗?我并不是真的想要本地化,更多的是在整个应用程序中更改名称和一些图片。

所有的方法都是有效的。使用最适合你的东西。我有几点意见:

  • 您不必将字符串添加到
    ResourceDictionary
    ;您还可以使用
    x:Static
    访问常量:

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} running version {1}">
                <Binding Source="{x:Static local:MyApp.Name}"/>
                <Binding Source="{x:Static local:MyApp.Version}"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    
    我更喜欢这种方法,而不是
    多绑定
    。例如,在这里,您甚至可以添加
    等元素来呈现格式化文本


第1种方法更好,因为它符合逻辑,并且纯粹基于标记。并在第一次进近的下一个子进近中将内部
TextBlocks
替换为
Run
。+1。
TextBlock
Runs
是最好、最简单、最清晰的解决方案,甚至可以缩短,因为TextBlock中的原始文本元素会自动被视为Runs:
running
public static class Strings
{
    public static string ProductRunningVersion =>
        $"{MyApp.Name} running version {MyApp.Version}";
}

<TextBlock Text="{x:Static local:Strings.ProductRunningVersion}"/>
<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} running version {1}">
            <Binding Source="{x:Static local:MyApp.Name}"/>
            <Binding Source="{x:Static local:MyApp.Version}"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>
<TextBlock>
    <Run Text="{x:Static local:MyApp.Name}"/>
    <Run Text=" running version "/>
    <Run Text="{x:Static local:MyApp.Version}"/>
<TextBlock>