web-dev-qa-db-ja.com

不思議な赤い境界線がComboBoxの周りに表示されます

メインページにComboBoxを備えたWPFアプリ(XBAP)があります。 ComboBoxで項目を選択すると、イベントハンドラーがリストボックスのデータソースであるコレクションを再構築します。非常に単純なもののようです。これまでにWPFで行ったことはすべてあります。

リストからアイテムを選択した後のドロップダウンは次のようになります。

WTF?

赤い境界線はいったいどこから来たのですか?フォームを最初から作成しています。現在、スタイリングなどはありません。 「赤」というテキストは、プロジェクトのどこにも言及されていません。一度表示されると消えることはなく、コントロールの上に置いたものの上に表示されます。

マークアップは次のとおりです。

<ComboBox.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Converter={StaticResource ResourceKey=DeviceInfoNameConverter}}"></TextBlock>
    </DataTemplate>
</ComboBox.ItemTemplate>

詳細:

  • これはIE8で実行されているXBAPアプリケーションです
  • 同じページの他のドロップダウンコントロールはこれを行っていません
  • Snoopでコントロールツリーを調べようとすると、境界線が消えます
  • コンバーターは問題の原因ではありません。基になるオブジェクトのプロパティに直接バインドしようとしましたが、ボックスは引き続き表示されます。

検索からこれまでのところ私の唯一の推測は、コントロールに適用されているある種のデフォルトのエラーテンプレートがあるということです。私はWIAを使用していますが、VS出力ウィンドウに表示されるいくつかのCOM例外があり、明らかにListViewのデータバインディングに関連しています。コントロールへのデータソースはWIA.DeviceInfoオブジェクトであり、コンバーターはドロップダウンテキストのnameプロパティを取得しているだけです。

23
flatline

バインドするものがすべて期待されるデータ型であることを確認してください。

decimalオブジェクトのリストにバインドしたときに、この「不思議な赤いボックス」がありましたが、MVVMプロパティタイプはintでした。 SelectedValueDisplayMemberPath、およびSelectedValuePathのすべてのプロパティを使用している場合は、それらを確認して再確認します。また、SelectedValueを使用していないことを確認してください。 SelectedItemを使用するつもりでした。

デバッグコンソールで、次のようなバインディングエラーを探します。

System.NotSupportedException: Int32Converter cannot convert from System.Decimal
System.Windows.Data Error: 7 : ConvertBack cannot convert value '7' (type 'Decimal'). BindingExpression:Path=SharedProductHistoryFilterCriteria.FilterDays; DataItem='PricingManagerViewModel' (HashCode=19425465); target element is 'ComboBox' (Name=''); target property is 'SelectedValue' (type 'Object') NotSupportedException:'System.NotSupportedException: Int32Converter cannot convert from System.Decimal.
   at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)
   at MS.Internal.Data.ObjectTargetConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture)
   at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture)'
32
Simon_Weaver

私も同じ問題を抱えていたので、SelectedItemとItemsSourceの両方のデータ型をdoubleに変更しました。以前はItemsSourceのintのリストとSelectedItemのdoubleのリストがありました。これは機能します。

1
Varatharaj

単なる型キャストの問題のようです。私の場合、SelectedIndexはEnumタイプのプロパティにバインドされており、そのプロパティのセッターは呼び出されませんでした。コンバーターのConvertとConvertBackの両方で、戻り値を正しいタイプに明示的にキャストする必要がありました。

0
Michel P.

私も同じ問題を抱えていました。データの不一致であることが判明しました。コンボボックスで選択されたアイテムは文字列にマップされ、選択された値はバイトにマップされました。両方を文字列に変換すると、期待どおりに機能していました。

0
Raz