我有一个包含一些静态信息的类,即:
public static class MyApp
{
public static string Name = "Awesome App";
public static string Version = "1.0";
}
我希望在我的应用程序中任何显示应用名称的地方都使用这个字符串,但问题是有些地方不止一个变量字符串。
例如:
<TextBlock Text="Awesome App running version 1.0"/>
我希望这些内容可以从静态变量中填充。我已经阅读了一些资料,并看到了几个选项:
1. 使用 MultiBinding
并加载相关的 ResourceDictionary
:
<ResourceDictionary>
<sys:String x:Key="AppName">Awesome App</sys:String>
<sys:String x:Key="AppVersion">1.0</sys:String>
</ResourceDictionary>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} running version {1}">
<Binding Path="{StaticResource AppName}"/>
<Binding Path="{StaticResource AppVersion}"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
我想我也可以有多个TextBlock
:
<TextBlock>
<TextBlock Text="{StaticResource AppName}"/>
<TextBlock Text=" running version "/>
<TextBlock Text="{StaticResource AppVersion}"/>
<TextBlock>
2. 使用静态 "strings" 类和静态属性:
public static class Strings
{
public static string ProductRunningVersion =>
$"{MyApp.Name} running version {MyApp.Version}";
}
<TextBlock Text="{x:Static local:Strings.ProductRunningVersion}"/>
=>
在属性中的使用是有意为之的 - 在测试时,我遇到了一些静态变量初始化顺序的问题。(有些是通过静态构造函数进行初始化)
我不确定哪种方法更好。
第一种方法感觉更加“正式”,但也很混乱。
第二种方法感觉要干净得多,但与我在WPF中习惯的方式不太一样。而且,必须将字符串定义为get
函数而不是静态字符串,这会带来一些成本吗?
这两种方法都可以吗?我并不是真的要进行本地化,只是要在整个应用程序中更改名称和一些图像。
Run
替换内部的TextBlocks
。 - AnjumSKhan