如何解决“..dictionary entry must have associated key”错误?
How to resolve "..dictionary entry must have associated key" error?
我已经在我的 App.xaml 文件中添加了一个名称空间,以便解析我在 project.Then 中的 ViewModelLocator.cs 位置并引用 ResourceDictionary 中的 ns。但是当我添加这些时我得到了两个错误:
..Each dictionary entry must have an associated key.
'ViewModelLocator' does not exist in XML namespace 'clr-namespace:MongoDBApp.ViewModels;assembly=MongoDBApp'
我首先检查了命名空间对于 ViewModelLocator 的位置是否正确,即:namespace MongoDBApp.ViewModels
.
我还检查了 ResourceDictionary 中引用的语法,这似乎是正确的。这个 solution 没有解决错误,我已经清理并重建了几次解决方案。
任何人都可以建议如何解决此错误?
App.xml文件的定义如下,ResourceDictionary在文件底部附近:
<Application x:Class="MongoDBApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:MongoDBApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MongoDBApp.ViewModels;assembly=MongoDBApp"
xmlns:validators="clr-namespace:MongoDBApp.Validator"
StartupUri="pack://application:,,,/Views/MainView.xaml"
d1p1:Ignorable="d">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel>
<Grid Width="16"
Height="16"
Margin="3 0 0 0"
VerticalAlignment="Center"
DockPanel.Dock="Right">
<Ellipse Width="16"
Height="16"
Fill="Red" />
<Ellipse Width="3"
Height="8"
Margin="0 2 0 0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Fill="White" />
<Ellipse Width="2"
Height="2"
Margin="0 0 0 2"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Fill="White" />
</Grid>
<Border BorderBrush="Red"
BorderThickness="2"
CornerRadius="2">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
<ResourceDictionary>
<local:ViewModelLocator x:Key="mainViewModelLocator" ></local:ViewModelLocator>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Brown.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Brown.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
类似这样的东西应该可以工作,请注意我的 ViewModelLocator 在这种情况下来自 prism(这就是为什么我需要 IView,如果你使用其他东西则不需要)。
基地class
public class MyFormUserControl : UserControl, IView
{
public MyFormUserControl()
{
if (!DesignerProperties.GetIsInDesignMode(this))
{
SetValue(ViewModelLocator.AutoWireViewModelProperty, true);
}
}
}
用户控件
<controls:MyFormUserControl x:Class="MyWpf1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="path to the base class">
your usual xaml goes here
</controls:MyFormUserControl>
代码隐藏
public partial class UserControl1: MyFormUserControl
{
public CrateFormView() : base()
{
InitializeComponent();
}
}
我已经在我的 App.xaml 文件中添加了一个名称空间,以便解析我在 project.Then 中的 ViewModelLocator.cs 位置并引用 ResourceDictionary 中的 ns。但是当我添加这些时我得到了两个错误:
..Each dictionary entry must have an associated key.
'ViewModelLocator' does not exist in XML namespace 'clr-namespace:MongoDBApp.ViewModels;assembly=MongoDBApp'
我首先检查了命名空间对于 ViewModelLocator 的位置是否正确,即:namespace MongoDBApp.ViewModels
.
我还检查了 ResourceDictionary 中引用的语法,这似乎是正确的。这个 solution 没有解决错误,我已经清理并重建了几次解决方案。
任何人都可以建议如何解决此错误?
App.xml文件的定义如下,ResourceDictionary在文件底部附近:
<Application x:Class="MongoDBApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:MongoDBApp.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MongoDBApp.ViewModels;assembly=MongoDBApp"
xmlns:validators="clr-namespace:MongoDBApp.Validator"
StartupUri="pack://application:,,,/Views/MainView.xaml"
d1p1:Ignorable="d">
<Application.Resources>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel>
<Grid Width="16"
Height="16"
Margin="3 0 0 0"
VerticalAlignment="Center"
DockPanel.Dock="Right">
<Ellipse Width="16"
Height="16"
Fill="Red" />
<Ellipse Width="3"
Height="8"
Margin="0 2 0 0"
HorizontalAlignment="Center"
VerticalAlignment="Top"
Fill="White" />
<Ellipse Width="2"
Height="2"
Margin="0 0 0 2"
HorizontalAlignment="Center"
VerticalAlignment="Bottom"
Fill="White" />
</Grid>
<Border BorderBrush="Red"
BorderThickness="2"
CornerRadius="2">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
<ResourceDictionary>
<local:ViewModelLocator x:Key="mainViewModelLocator" ></local:ViewModelLocator>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Brown.xaml" />
<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Brown.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
类似这样的东西应该可以工作,请注意我的 ViewModelLocator 在这种情况下来自 prism(这就是为什么我需要 IView,如果你使用其他东西则不需要)。
基地class
public class MyFormUserControl : UserControl, IView
{
public MyFormUserControl()
{
if (!DesignerProperties.GetIsInDesignMode(this))
{
SetValue(ViewModelLocator.AutoWireViewModelProperty, true);
}
}
}
用户控件
<controls:MyFormUserControl x:Class="MyWpf1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="path to the base class">
your usual xaml goes here
</controls:MyFormUserControl>
代码隐藏
public partial class UserControl1: MyFormUserControl
{
public CrateFormView() : base()
{
InitializeComponent();
}
}