XAML添加转换器类的命名空间

4
我一直收到“名称 xxx 在 yyy 中不存在”的错误提示。 我不明白为什么会这样,我认为我已经尝试了所有可能的组合方式。
我的所有.cs文件,包括主窗口都在"Web_Media_Seeker_WPF"命名空间中。 Converters.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace Web_Media_Seeker_WPF.WPFConverters
{
    public class BoolToValueConverter<T> : IValueConverter
    {
        public T FalseValue { get; set; }
        public T TrueValue { get; set; }

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return FalseValue;
            else
                return (bool)value ? TrueValue : FalseValue;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value != null ? value.Equals(TrueValue) : false;
        }
    }

    public class BoolToObjectConverter : BoolToValueConverter<Object> { }
    public class BoolToStringConverter : BoolToValueConverter<String> { }
    public class BoolToBrushConverter : BoolToValueConverter<System.Windows.Media.Brush> { }
    public class BoolToVisibilityConverter : BoolToValueConverter<System.Windows.Visibility> { }
    public class BoolToColorConverter : BoolToValueConverter<System.Windows.Media.Color> { }
    public class BoolToImageSourceConverter : BoolToValueConverter<System.Windows.Media.ImageSource> { }
    public class BootToBoolConverter : BoolToValueConverter<bool> { }

        public class AddValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            object result = value;
            int Value;

            if (value != null && targetType == typeof(Int32) &&
                int.TryParse((string)parameter,
                System.Globalization.NumberStyles.Integer, culture, out Value))
            {
                result = (int)value + (int)Value;
            }

            return result;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

MainWindow.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namesapce:Web_Media_Seeker_WPF.WPFConverters"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        x:Class="Web_Media_Seeker_WPF.MainWindow"
        Title="Web Media Seeker"
        Height="563"
        Width="836">
  <Window.Resources>
    <local:BoolToImageSourceConverter x:Key="BoolToWorkImageSource"
                                      TrueValue="Images/work.png"
                                      FalseValue="Images/idle.png" />
    <local:BootToBoolConverter x:Key="InvertBool"
                               TrueValue="False"
                               FalseValue="True" />
    <local:BoolToStringConverter x:Key="WorkTooltip"
                                 TrueValue="Working..."
                                 FalseValue="Idle" />
  </Window.Resources>
and stuff...

我遇到的错误:

名称为"BoolToImageSourceConverter"的内容在命名空间"clr-namesapce:Web_Media_Seeker_WPF.WPFValuesConverters"中不存在。

名称为"BoolToStringConverter"的内容在命名空间"clr-namesapce:Web_Media_Seeker_WPF.WPFValuesConverters"中不存在。

名称为"BootToBoolConverter"的内容在命名空间"clr-namesapce:Web_Media_Seeker_WPF.WPFValuesConverters"中不存在。

XML命名空间'clr-namesapce:Web_Media_Seeker_WPF.WPFValuesConverters'中不存在标签"BoolToImageSourceConverter"。

未找到类型为'local:BoolToImageSourceConverter'。请确认您没有丢失程序集引用,并且所有引用的程序集已构建完成。

未找到类型为'local:BoolToStringConverter'。请确认您没有丢失程序集引用,并且所有引用的程序集已构建完成。

未找到类型为'local:BootToBoolConverter'。请确认您没有丢失程序集引用,并且所有引用的程序集已构建完成。

2个回答

7

你的命名空间声明存在错误:

xmlns:local="clr-namesapce:Web_Media_Seeker_WPF.WPFConverters"

应该是

xmlns:local="clr-namespace:Web_Media_Seeker_WPF.WPFConverters"

您把namesapce写成了namespace


我尝试过这个。当移除项目后,构建没有问题。但是当我再次添加它们时,又出现了错误。 - Nerfpl
你能运行这个应用程序吗?有时候VS不能立即理解它。 - Kenneth
不,我收到了“构建错误。您是否要运行上一次成功的构建”消息。 - Nerfpl
它们是否位于同一程序集中? - Kenneth
1
明白了!你在 XAML 的命名空间声明中有一个拼写错误。 - Kenneth

0

我曾经遇到过这个问题,但是没有打错字。问题并不是直接与XAML有关,或者至少不完全是。原始开发人员将Window标签命名为与代码后台类名称相同的名称,似乎现在被禁止了。这是XAML中唯一的问题。其他所有问题都与WPF和Windows.System.Data库中的重叠有关,导致IValueConverter(在System.Windows.Data命名空间中)无法识别。 我首先通过对象浏览器搜索具有IValueConverter接口的所有库。其中,我的项目中有两个库,其中一个是事后想到的,因为我认为我需要它来替换WPF工具包3.5的元素,但我已经删除了它。我删除了我认为可以不用的那个,问题就解决了。这有点像“模糊引用”错误,但它并不是以这种方式出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接