我使用资源字典进行本地化,我在wpf:
中有这个代码<Window x:Class="RWIS_WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="RWIS" Height="500" Width="800" MinHeight="500" MinWidth="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Localizations/Dictionary.EN.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
我的问题是,我想使用{StaticResource mW_screen1}
<Window x:Class="RWIS_WPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="{StaticResource IT_IS_NOT_WORKING}" Height="500" Width="800"
MinHeight="500" MinWidth="800">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Localizations/Dictionary.EN.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<TextBlock Text="{StaticResource IT_IS_WORKING}"></TextBlock>
但它不起作用,因为资源是在title调用它之后定义的。当我尝试运行它时会给我错误
System.Windows.Markup.XamlParseException发生Message ='Provide 'System.Windows.StaticResourceExtension'上的值引发异常。 行号“6”和行位置“9”。
在添加资源
后,它适用于标题,文本我试图用c#代码调用它,但我没有成功。
我知道有选择:
<Window.Title></Window.Title>
但是没有像文本或值这样的参数,我可以在哪里放Text="{StaticResource IT_IS_WORKING}"
答案 0 :(得分:6)
StaticResource
在将BAML(已编译的XAML)加载到内存中时应用parses XAML from top to bottom
,并且由于您的资源尚未创建,因此在加载XAML时会抛出错误。
相反,请尝试使用DynamicResource
,这是您可以说的延迟加载版本。它将表达式对象分配给目标属性。这会延迟查找资源,直到在运行时需要它。
阅读本文以进一步说明 - StaticResource V/S DyanamicResource。
<Window Title="{DynamicResource IT_WILL_WORK}"/>
答案 1 :(得分:5)
只需使用StaticResource
的更详细的定义:
xmlns:System="clr-namespace:System;assembly=mscorlib"
...
<Window.Resources>
<System:String x:Key="Title">Some Title</System:String>
...
</Window.Resources>
<Window.Title>
<StaticResource ResourceKey="Title" />
</Window.Title>