另一个名称在WPF中不存在问题

时间:2013-01-19 15:31:10

标签: wpf c#-4.0 mvvm visual-studio-2012

在这个项目中,代码编译并正确执行;但是,我需要帮助解决两个问题:

  1. VS2012 WPF设计器无法处理此XAML文件。它显示消息设计视图不适用于x64和ARM目标平台

  2. 我收到以下消息名称“EnumConverter”在名称空间“clr-namespace:VideoDatabase.Enums”中不存在。同样,这不会干扰编译或执行项目。

  3. 这是XAML:

    <Window x:Class="VideoDatabase.Views.SortingView"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:VideoDatabase.Enums"
            Title="Sort and Filter" SizeToContent="WidthAndHeight" ResizeMode="NoResize"
            Background="LightGray">
        <Window.InputBindings>
            <KeyBinding Gesture="Escape" Command="{Binding CloseWindowCommand}"/>
        </Window.InputBindings>
        <Window.Resources>
            <!-- Next line generates Intellisene error; however, the code compiles and executes -->
            <local:EnumConverter x:Key="enumConverter"/>
        </Window.Resources>
    

    EnumConverter是VideoDatabase.Enums名称空间中的公共类,位于当前程序集中。以下是该类的代码段:

    namespace VideoDatabase.Enums
    {
        public class EnumConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                string parameterString = parameter as string;
                if (parameterString == null)
                     return DependencyProperty.UnsetValue;
    
                if (Enum.IsDefined(value.GetType(), value) == false)
                    return DependencyProperty.UnsetValue;
    
                object parameterValue = Enum.Parse(value.GetType(), parameterString);
    
                return parameterValue.Equals(value);
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                string parameterString = parameter as string;
                if (parameterString == null)
                    return DependencyProperty.UnsetValue;
    
                return Enum.Parse(targetType, parameterString);
            }
        }
    }
    

    到目前为止,我已检查过以下内容:

    • 确认目标框架是.NET Framework 4.5
    • 确认EnumConverter类在主程序集中
    • 如果我评论<local:EnumConverter x:Key="enumConverter"/>设计师的作品。

2 个答案:

答案 0 :(得分:4)

您最有可能将构建目标平台设置为x64位。

然后会发生输出组件仅为64位,基于x86的WPF设计器无法加载。

转到项目属性 - &gt; Build->Target Platform并将其设置为Any

编辑: 如果您需要从32位WPF设计器访问程序集/代码(在本例中为值转换器),则必须将它们与其他64位程序集分开。 我很难找到任何理由为什么值转换器需要在64位DLL中,而不是硬依赖,如你的情况。

如果您无法做到这一点,我认为您将不得不忍受在您的方案中无法使用设计师的事实。

答案 1 :(得分:0)

是不是因为你错过了转换器的预编译器......就像......

[ValueConversion(typeof(changing from type), typeof( changing TO type))]
public class BoolToVisibility : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)

}