在WPF应用程序中定义资源的不同方法

时间:2014-12-27 08:13:15

标签: c# wpf xaml resources

相当新的(几天)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}">

我何时以及为什么要优先选择其他人?

1 个答案:

答案 0 :(得分:0)

此类资源:

<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";
}

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

WPF Localization for Dummies

Sample for globalization and localization in WPF

您可以看到此实施的示例。

此类资源:

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

是常量并且意味着它们在应用程序的整个生命周期中都不会更改(不包括DynamicResource)。我保留窗口大小不会改变,以及其他窗口标题串。