Вокруг ComboBox появляется таинственная красная рамка

У меня есть приложение WPF — XBAP — с ComboBox на главной странице. Когда я выбираю элемент в поле со списком, обработчик событий перестраивает коллекцию, которая является источником данных для списка. Кажется, довольно простые вещи, все, что я делал в WPF раньше.

Вот как выглядит мой выпадающий список после выбора элемента из списка:

WTF?

Откуда взялась красная кайма? Я строю форму с нуля, сейчас на ней нет стилей или чего-то еще. Текст «красный» даже нигде в проекте не упоминается. Он не исчезнет, ​​как только появится, и он появится поверх всего, что я поместил поверх элемента управления.

Вот разметка:

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

Еще немного деталей:

  • Это приложение XBAP, работающее в IE8.
  • Другие выпадающие элементы управления на той же странице этого не делают.
  • Граница исчезает, когда я пытаюсь изучить дерево управления с помощью Snoop.
  • Преобразователь не является источником проблемы, я попытался привязать непосредственно к свойству базового объекта, и поле все еще появляется.

Мое единственное предположение, далекое от поиска, заключается в том, что существует какой-то шаблон ошибки по умолчанию, который применяется к элементу управления. Я работаю с WIA, и в окне вывода VS появляется несколько исключений COM, по-видимому, связанных с привязкой данных для ListView. Источником данных для элемента управления является объект WIA.DeviceInfo, преобразователь просто получает свойство имени для раскрывающегося текста.


person flatline    schedule 11.11.2010    source источник
comment
Это может помочь? удалить красный прямоугольник вокруг поля со списком   -  person Patrick    schedule 12.11.2010


Ответы (5)


Убедитесь, что все, что вы привязываете, точно соответствует ожидаемому типу данных.

У меня был этот «таинственный красный ящик», когда я пытался связать список объектов decimal, но мой тип свойства MVVM был int. Проверьте и перепроверьте все ваши свойства SelectedValue, DisplayMemberPath и 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)'
person Simon_Weaver    schedule 28.07.2012
comment
+1 за рекомендацию консоли отладки; это самый простой способ определить, почему проверка не удалась. - person Rob; 06.11.2013
comment
Устранение причины ошибки лучше, чем скрытие индикации! - person SDo; 08.12.2014
comment
Все, что я получаю, это исключение: «System.NotSupportedException» в System.dll. Исключение: «System.NotSupportedException» в PresentationFramework.dll. - person sproketboy; 11.04.2018

У меня тоже была такая же проблема, затем я изменил типы данных как SelectedItem, так и ItemsSource на double. Раньше у меня был список int для ItemsSource и double для SelectedItem. Он работает.

person Varatharaj    schedule 03.06.2016

Похоже, это просто проблема с типом. В моем случае SelectedIndex был привязан к свойству типа Enum, и установщик этого свойства никогда не вызывался. Мне просто нужно было явно привести возвращаемое значение к правильному типу как в Convert, так и в ConvertBack моего конвертера.

person Michel P.    schedule 07.09.2016

Я была такая же проблема. Оказалось несоответствие данных. Выбранный элемент Combobox был сопоставлен со строкой, а выбранное значение — с байтом. Как только я преобразовал оба в строку, все заработало, как и ожидалось.

person Raz    schedule 20.02.2019

Должно ли ваше выбранное значение не быть членом коллекции, а не самой коллекцией папок? то есть Folders.Folder.ID или что-то в этом роде?

Таким образом, ваш источник элементов CB будет папкой, а selectedItem будет папкой, а selectedValue будет именем ??????

вам нужно обновить SelectedValue до члена коллекции. Кроме того, вам нужно будет указать ItemsSource = {Binding Path=Folders}" t. Затем вам нужно будет указать DisplayMemberPath и SelectedValuePath.

Я бы проверил каждую привязку отдельно. Сначала проверьте привязку для IsEnabled, удалив каждую привязку для коллекции элементов, если она включена/отключена, как выбрано, а затем начните тестирование привязки для коллекции.

person dnxit    schedule 25.05.2012