【问题标题】:Different ways to define resources in a WPF app在 WPF 应用程序中定义资源的不同方法
【发布时间】:2014-12-27 08:13:14
【问题描述】:

WPF 开发和 C# 相当新(几天)。寻找从 XAML 定义和访问应用程序资源的两种方式之间的高级哲学差异:

  • 我可以在可视化编辑器的 .resx 文件中定义资源,然后在像 <TextBox Text="{x:Static p:Resources.name}"> 这样的 XAML 文件中读取它们(前提是“p”命名空间指向应用程序属性)。

  • 或者我可以在我的控制层次结构中的任何位置定义资源,比如<sys:String x:Key="name">Name</sys:String>,然后将它们引用为<TextBox Text="{StaticResource name}">

我什么时候以及为什么要选择其中一个而不是另一个?

【问题讨论】:

  • 当您需要将应用程序本地化为多种语言时,您会注意到差异。如果您使用 .resx,您只需要添加资源程序集(WPF 会自动查找并加载它们)。这个魔法是通过 ResourceManager 完成的。 XAML 文件没有这样的魔力。

标签: c# wpf xaml resources


【解决方案1】:

该类型的资源:

<TextBox Text="{x:Static p:Resources.name}">

通常用来代替系统注册表,也就是存放一些可以改变用户的元数据应用,比如背景颜色、一些设置等。

Example

从 XAML 绑定默认值:

xmlns:properties="clr-namespace:WorkWithSettings.Properties"

<Button Width="100" Height="30"
        Background="{Binding Source={x:Static properties:Settings.Default}, Path=Setting, Mode=TwoWay}" />

从代码中设置值:

private void Button_Click(object sender, RoutedEventArgs e)
{
    WorkWithSettings.Properties.Settings.Default.Setting = "#FF007CE4";
}

如 cmets @gomi42 中所述,此类资源用于本地化应用程序。这里:

WPF Localization for Dummies

Sample for globalization and localization in WPF

您可以查看此实现的示例。

该类型的资源:

<sys:String x:Key="name">Name</sys:String>

是常量,意味着它们在应用程序的整个生命周期内都不会改变(不包括DynamicResource)。我把它保存在那里,窗口大小不会改变,还有其他的窗口标题字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多