在这个项目中,代码编译并正确执行;但是,我需要帮助解决两个问题:
VS2012 WPF设计器无法处理此XAML文件。它显示消息设计视图不适用于x64和ARM目标平台。
我收到以下消息名称“EnumConverter”在名称空间“clr-namespace:VideoDatabase.Enums”中不存在。同样,这不会干扰编译或执行项目。
这是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);
}
}
}
到目前为止,我已检查过以下内容:
EnumConverter
类在主程序集中<local:EnumConverter x:Key="enumConverter"/>
设计师的作品。答案 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)
}