xaml 没有看到我的 ivalueconverter
xaml is not seeing my ivalueconverter
我知道以前有人问过这个问题,但我真的无法根据这些答案弄清楚这里发生了什么,因为以前的提问者似乎将他们的 ivalueconverter 放在了不同的 类 或文件下。我的 IValueConverter 在命名空间 Proc 中,但由于某种原因,我收到错误:
The name "LatValueConverter" does not exist in the namespace
"clr-namespace:Proc".
The name "LongValueConverter" does not exist in the namespace
"clr-namespace:Proc".
该代码用于加载外部文件并根据文件中指定的 lat/lon 值放置图像。应用程序构建,但图像没有显示,这告诉我这个方法失败了。 (以下仅显示相关代码)
此外,这些错误在 visual studio 错误列表中,但在 xaml 编辑器中键入 local:
后,LatValueConverter 和 LongValueConverter 都会显示在下拉菜单中。我试过 cleaning/rebuilding 但错误仍然出现。关于如何解决这个问题有什么想法吗?
Visual Studio 2015 更新 1 编辑:
我在使用 Visual Studio 2015 更新 1 时注意到它后写了这个问题。我在 Visual Studio 2015 重新加载了项目(没有更新),没有错误!这似乎是 Visual Studio 2015 更新 1 的错误。有人知道解决方法吗?
这里是 xaml:
<Window x:Class="Proc.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:Proc"
mc:Ignorable="d">
<Window.Resources>
<ResourceDictionary>
<local:LatValueConverter x:Key="latValueConverter" /> <!-- Errors are here -->
<local:LongValueConverter x:Key="longValueConverter" /> <!-- Errors are here -->
<sys:Double x:Key="mapWidth">950</sys:Double>
<sys:Double x:Key="mapHeight">530</sys:Double>
</ResourceDictionary>
</Window.Resources>
这里是MainWindow.xaml.cs:
namespace Proc
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
//...
}
public class LatValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double latitude = (double)value;
double height = (double)parameter;
int top = (int)((Constants.LatTop - latitude) / (Constants.LatTop - Constants.LatBottom) * height);
return top;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class LongValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double longitude = (double)value;
double width = (double)parameter;
int left = (int)((Constants.LongLeft - longitude) / (Constants.LongLeft - Constants.LongRight) * width);
return left;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
删除您的 ResourceDictionary
对象;所以它最终应该是这样的:
<Window.Resources>
<local:LatValueConverter x:Key="latValueConverter" /> <!-- Errors are here -->
<local:LongValueConverter x:Key="longValueConverter" /> <!-- Errors are here -->
<sys:Double x:Key="mapWidth">950</sys:Double>
<sys:Double x:Key="mapHeight">530</sys:Double>
</Window.Resources>
我在 VS 2015 Update 1 上遇到了同样的问题。
代码构建和运行正常,但设计师抱怨 "some elements haven't been built yet..." 如果我将鼠标悬停在 XAML 的 "offending" 部分,工具提示会显示 "MyCustomConverter does not exist in the namespace etc..."
出于某种原因,在我的例子中,只有当我将解决方案构建为任何 CPU 时,我才会得到这种设计器行为。如果我将它强制为 x64,那么设计器就可以工作了。
我还没有尝试过 VS 2015 更新 2。
我知道以前有人问过这个问题,但我真的无法根据这些答案弄清楚这里发生了什么,因为以前的提问者似乎将他们的 ivalueconverter 放在了不同的 类 或文件下。我的 IValueConverter 在命名空间 Proc 中,但由于某种原因,我收到错误:
The name "LatValueConverter" does not exist in the namespace "clr-namespace:Proc".
The name "LongValueConverter" does not exist in the namespace "clr-namespace:Proc".
该代码用于加载外部文件并根据文件中指定的 lat/lon 值放置图像。应用程序构建,但图像没有显示,这告诉我这个方法失败了。 (以下仅显示相关代码)
此外,这些错误在 visual studio 错误列表中,但在 xaml 编辑器中键入 local:
后,LatValueConverter 和 LongValueConverter 都会显示在下拉菜单中。我试过 cleaning/rebuilding 但错误仍然出现。关于如何解决这个问题有什么想法吗?
Visual Studio 2015 更新 1 编辑: 我在使用 Visual Studio 2015 更新 1 时注意到它后写了这个问题。我在 Visual Studio 2015 重新加载了项目(没有更新),没有错误!这似乎是 Visual Studio 2015 更新 1 的错误。有人知道解决方法吗?
这里是 xaml:
<Window x:Class="Proc.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:Proc"
mc:Ignorable="d">
<Window.Resources>
<ResourceDictionary>
<local:LatValueConverter x:Key="latValueConverter" /> <!-- Errors are here -->
<local:LongValueConverter x:Key="longValueConverter" /> <!-- Errors are here -->
<sys:Double x:Key="mapWidth">950</sys:Double>
<sys:Double x:Key="mapHeight">530</sys:Double>
</ResourceDictionary>
</Window.Resources>
这里是MainWindow.xaml.cs:
namespace Proc
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
//...
}
public class LatValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double latitude = (double)value;
double height = (double)parameter;
int top = (int)((Constants.LatTop - latitude) / (Constants.LatTop - Constants.LatBottom) * height);
return top;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class LongValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
double longitude = (double)value;
double width = (double)parameter;
int left = (int)((Constants.LongLeft - longitude) / (Constants.LongLeft - Constants.LongRight) * width);
return left;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
删除您的 ResourceDictionary
对象;所以它最终应该是这样的:
<Window.Resources>
<local:LatValueConverter x:Key="latValueConverter" /> <!-- Errors are here -->
<local:LongValueConverter x:Key="longValueConverter" /> <!-- Errors are here -->
<sys:Double x:Key="mapWidth">950</sys:Double>
<sys:Double x:Key="mapHeight">530</sys:Double>
</Window.Resources>
我在 VS 2015 Update 1 上遇到了同样的问题。
代码构建和运行正常,但设计师抱怨 "some elements haven't been built yet..." 如果我将鼠标悬停在 XAML 的 "offending" 部分,工具提示会显示 "MyCustomConverter does not exist in the namespace etc..."
出于某种原因,在我的例子中,只有当我将解决方案构建为任何 CPU 时,我才会得到这种设计器行为。如果我将它强制为 x64,那么设计器就可以工作了。
我还没有尝试过 VS 2015 更新 2。