1

この問題を 1 時間以上解決しようとしてきましたが、わかりません。誰かが私が間違っていることを理解できることを願っています。

私は 2 つの別個のプロジェクトを持っています。どちらも UserControl.Resources セクションに Double の配列を含むコンボボックスを設定し、GUI でそれにデータバインドします。私がやっていることは基本的にこれだけで、kaxaml と私の 2 つのプロジェクトの 1 つで正常に動作します。

<Page>
  <Page.Resources>
    <x:Array x:Key="Increments" Type="sys:Double">
      <sys:Double>0.01</sys:Double>
      <sys:Double>0.02</sys:Double>
      <sys:Double>0.03</sys:Double>
      <sys:Double>0.04</sys:Double>
    </x:Array>
  </Page.Resources>

  <Grid>  
    <ComboBox ItemsSource="{StaticResource Increments}" />
  </Grid>
</Page>

他のプロジェクトでは、次のエラーが表示されます。

属性 'ItemsSource' の値をタイプ 'System.Collections.IEnumerable' のオブジェクトに変換できません。'System.Windows.Markup.ArrayExtension' は、プロパティ 'ItemsSource' の有効な値ではありません。マークアップ ファイルのオブジェクト 'System.Windows.Controls.ComboBox' でエラーが発生しました ...

なぜこれが起こっているのかわかりません。両方の XAML ファイルで参照されているスキーマを調べてみましたが、同じです... [出力] ウィンドウにエラーやメッセージはありません。私は必死になり、FxCop を実行して、関連する何かをキャッチするかどうかを確認しました。いくつかの有効なエラーをキャッチしましたが、関連するものはありませんでした。

4

1 に答える 1

2

これを動作させるには、これを ObjectDataProvider でラップし、StaticResource を StaticResource へのバインディングに置き換える必要がありました。

<!-- Resources -->
<ObjectDataProvider x:Key="Incs2">
  <ObjectDataProvider.ObjectInstance>
    <x:Array Type="sys:Double">
      <sys:Double>0.01</sys:Double>
      <sys:Double>0.02</sys:Double>
      <sys:Double>0.03</sys:Double>
      <sys:Double>0.04</sys:Double>
    </x:Array>
  </ObjectDataProvider.ObjectInstance>
</ObjectDataProvider>

<!-- Page content -->
<ComboBox ItemsSource="{Binding Source={StaticResource Incs2}}" />

編集:x:Arrayリソースを Resources セクションの一番上に移動すると、他のリソース宣言の前に、元のリソースを使用ItemsSource="{StaticResource ...}"でき、例外が発生しなくなります (または ObjectDataProvider は必要ありません)。これは WPF のバグのようです。

于 2010-01-29T02:36:38.673 に答える