1

このラジオボタンのチュートリアルに従おうとしています

EnumMatchToBooleanConverterというクラスを作成しました。これは、wpfプロジェクトの最上位にあります。次のようにwindow.resourcesの内側に配置するように指示されています。

<Window.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</Window.Resources>

ユーザーコントロールで使用しているので、代わりにスタックパネル内に配置しました。

<StackPanel.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</StackPanel.Resources>

Microsoft Visual Studio Ultimate 2012を使用していますが、エラーが発生します。

EnumMatchToBooleanConverterは、Windows Presentation Foundation(WPF)プロジェクトではサポートされていません。

私が間違っていることについて何か考えはありますか?stackpanel.resources内に配置することはできませんか?

grid.resources内に配置してみました

<Grid.Resources>
  <EnumMatchToBooleanConverter x:Key="enumConverter" />
</Grid.Resources>

そしてそれは言う

タイプ'EnumMatchToBooleanConverter'が見つかりませんでした。アセンブリ参照が欠落していないこと、および参照されているすべてのアセンブリがビルドされていることを確認してください。

それは私のプロジェクトの他の部分と同じ名前空間にあるので、なぜそれが見つからないのかわかりません。

4

2 に答える 2

3

変化する

<EnumMatchToBooleanConverter x:Key="enumConverter" />

にとって

<local:EnumMatchToBooleanConverter x:Key="enumConverter" />

XAMLで参照するすべての非組み込みクラスには、対応するxmlnsプレフィックスを付ける必要があります。

于 2013-01-30T18:04:13.867 に答える
2

HighCoreはそれを正しく理解しています。この名前空間の議論に追加するために、コードを読みやすくしたり、特定のコントロール/値コンバーターなどがどこから来ているのか(つまり、実際にどのアセンブリから来ているのか)を診断するのに役立つ別のアプローチを指摘したいと思いました)。この手法により、XAMLがクリスチャンのブログにあるように表示される可能性があります(xmlnsプレフィックスなし)。

<EnumMatchToBooleanConverter x:Key="enumConverter" />

基本的に、このような名前空間を統合するためにいくつかの名前空間マッピングを実行します(ファイルが別のアセンブリ/プロジェクトにある場合にのみ機能します)。したがって、上記の私の例では、名前空間の1つをデフォルトのxmlnsにマップしているため、XAMLにプレフィックスは必要ありません。

私はまだこのテクニックをどこまで取り入れようとしているのか、そしてポール・ストーベルが上に示したようにそれを極端にすることについて話します。

その程度まで適用しなくても、他の人のXamlを見ていて、そのようなマッピングを適用している場合は、それについて知っておくと便利です。これを知っていると、AssemblyInfo.csファイルを検索してマッピングを確認し、Control / Value Converter/etcが実際にどこにあるかを追跡するのに役立つ可能性があります。

于 2013-01-30T19:04:53.663 に答える