此问题的上下文正在处理翻译。我设置了一个ResourceDictionary
,其中包含其他ResourceDictionary
实例以及针对不同区域的相关本地化字符串,以便更轻松地对其进行分组。不同的翻译项目XAML文件将存储在不同的语言代码文件夹中,但是对于下面的示例,它们不是必需的。
TranslationItems1.xaml
<ResourceDictionary ...>
<ResourceDictionary x:Key="Group1">
<sys:String x:Key="Field1">Group1Field1</sys:String>
<sys:String x:Key="Field2">Group1Field2</sys:String>
<sys:String x:Key="Field3">Group1Field3 out</sys:String>
</ResourceDictionary>
<ResourceDictionary x:Key="Group2">
<sys:String x:Key="Field1">Group2Field1</sys:String>
<sys:String x:Key="Field2">Group2Field2</sys:String>
<sys:String x:Key="Field3">Group2Field3 out</sys:String>
</ResourceDictionary>
</ResourceDictionary>
对于要使用这些翻译的部分,我设置DataContext
并进行相应的绑定。
UserControl1.xaml
<UserControl ...>
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary x:Key="Strings">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="TranslationItems1.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ResourceDictionary>
</UserControl.Resources>
<Button>
<Button.ContextMenu>
<ContextMenu DataContext="{DynamicResource Strings}">
<MenuItem Header="{Binding Path=[Group1][Field1]}" />
<MenuItem Header="{Binding Path=[Group1][Field2]}" />
<MenuItem Header="{Binding Path=[Group1][Field3]}" />
</ContextMenu>
</Button.ContextMenu>
</Button>
<Button>
<Button.ContextMenu>
<ContextMenu DataContext="{DynamicResource Strings}">
<MenuItem Header="{Binding Path=[Group2][Field1]}" />
<MenuItem Header="{Binding Path=[Group2][Field2]}" />
<MenuItem Header="{Binding Path=[Group2][Field3]}" />
</ContextMenu>
</Button.ContextMenu>
</Button>
</UserControl>
这种方法看来效果很好。它会生成并运行,并且我的字符串将按预期显示。
但是,IntelliSense会报告错误代码XLS0521
,并为绑定路径声明Type 'DictionaryEntry' is not a collection.
。该错误在构建时会消失,但是如果我随后对该文件进行任何更改,该错误会再次出现。
谷歌搜索该错误代码给了我多达10个结果。我假设发生此错误是因为它不知道Group1
和Group2
是字典,但是我不知道如何通过XAML明确声明它们。
如何在XAML中指定Group1
和Group2
是字典?