4

このプロジェクトでは、コードは適切にコンパイルおよび実行されます。ただし、解決に役立つ2つの問題があります。

  1. VS2012 WPFデザイナーは、このXAMLファイルでは機能しません。「デザインビューはx64およびARMターゲットプラットフォームでは使用できません」というメッセージが表示されます。

  2. 次のメッセージが表示されます。名前「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>

EnumConverterVideoDatabase.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);
        }
    }
}

これまでのところ、私は以下をチェックしました:

  • ターゲットフレームワークが.NETFramework4.5であることを確認しました
  • EnumConverterクラスがメインアセンブリにあることを確認しました
  • コメントアウトする<local:EnumConverter x:Key="enumConverter"/>とデザイナー作品。
4

3 に答える 3

4

ほとんどの場合、ビルドターゲットプラットフォームをx64ビットのみに設定しています。

その場合、出力アセンブリは64ビットのみであり、x86ベースのWPFデザイナーはロードできません。

プロジェクトのプロパティ->に移動し、Build->Target Platformをに設定しAnyます。

編集:32ビットWPFデザイナーからアクセスする必要のあるアセンブリ/コード(この場合は値コンバーター)がある場合は、それらを64ビットアセンブリから分離する必要があります。あなたの場合のように、値コンバーターがハード依存関係以外に64ビットDLLにある必要がある理由を見つけるのは難しいでしょう。

それが不可能な場合は、シナリオでデザイナーを使用できないという事実に耐えなければならないと思います。

于 2013-01-19T17:07:04.927 に答える
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)

}
于 2013-01-19T16:25:39.647 に答える