我在VS 2015中打开了一个VS 2012解决方案,无法进行编译。它最初的目标是.Net 3.5并使用了WPF工具包,这引起了一些模糊的引用。我通过删除对WPF Toolkit的引用并将其替换为DotNetProjects.Wpf.Toolkit包解决了这个问题。 现在我必须解决下一个问题,我怀疑它不是由明显引起的,而是来自升级版本的其他隐藏问题的级联。 我的XAML表单没有识别引用的命名空间中是否存在类。我可以让他们提出intellisense,但是应用程序不会编译,错误说的是:"名称" MainWindow"命名空间中不存在" clr-namespace:FieldSheetPrinter"。
我已使用以下内容定义了我的主要表单:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FieldSheetPrinter"
mc:Ignorable="d"
xmlns:Custom="http://schemas.microsoft.com/netfx/2009/xaml/presentation"
xmlns:validationRules="clr-namespace:SWallTech.ValidationSupport;assembly=SWallTech.ValidationSupport"
xmlns:FieldSheetPrinter_Converters="clr-namespace:FieldSheetPrinter.Converters"
xmlns:Converters="clr-namespace:SWallTech.WPF.Support.Converters;assembly=SWallTech.WPF.Support"
x:Class="FieldSheetPrinter.MainWindow"
x:Name="MainWindow"
Title="CAMRA Field Sheet Printer - Stonewall Technologies, Inc."
Width="744"
Height="583"
WindowStartupLocation="CenterScreen"
Icon="CamraPrint.ico">
我引用了解决方案中的SWallTech.WPF.Support项目,编译器在识别该项目的转换器命名空间中的类时没有问题。此代码没有错误指示符。 (红色波浪。)
<Converters:IntGreaterThanZeroToVisibilityConverter
x:Key="IntGreaterThanZeroToVisibilityConverter" />
<Converters:DatabaseConnectionImageSourceConverter
x:Key="DatabaseConnectionImageSourceConverter" />
但是,如果我尝试引用我用作数据源的ViewModel,我会收到错误:
<local:FieldSheetPrinterViewModel
x:Key="FieldSheetPrinterViewModelDataSource"
d:IsDataSource="True" />
我也得到了错误,即XAML表单本身不在命名空间FieldSheetPrinter中,当然,正如您可以从Code-Behind看到的那样。
namespace FieldSheetPrinter
{
public partial class MainWindow : Window
...
}
我已经尝试了所有我能想到的东西,而且我真的很难过。 乔伊
答案 0 :(得分:1)
如上所述,问题不在于XAML,或者至少不完全。原始开发人员将Window标记命名为与代码隐藏类名相同的名称,现在似乎已被禁止。这是XAML的唯一问题。其他所有内容都与WPF和Windows.System.Data库中的重叠有关,导致IValueConverter(在System.Windows.Data命名空间中)无法识别。我删除了任何其他可能存在冲突的引用,并更正了代码隐藏中显然已被弃用的一些语法问题。
实施例。
stringVariable.IsNullOrEmpty()
使用代替
string.IsNullOrEmpty(stringVariable)
在其他地方,一些ObservableCollection对象未被识别为可枚举,因此我必须在循环遍历集合之前添加“ToList()”。
很奇怪,但我没写这个东西!
感谢您的建议。
乔伊