Размещение конвертера вверху списка ресурсов Windows каким-то образом нарушает ресурсы объектов пользовательского интерфейса, которые идут после него.
Вот простейший пример приложения, воспроизводящего эту проблему, с наименьшим количеством кода, который я могу собрать:
0
1
2
3
Конвертер:
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Markup;
namespace WpfApp1.Converters
{
public class BaseConverter : MarkupExtension, IValueConverter
{
public virtual object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
}
Это всего лишь простая попытка загрузить переменное количество элементов внутри ItemsControl, где каждый элемент представляет собой ContentControl, который заполняется как Grid, определенный в ресурсе.
Вот как предположительно должно выглядеть приложение на основе этого xaml:

Это похоже на то, что x:Shared ломается и становится правдой или что-то, только потому, что ресурс конвертера был раньше этого.
Вещи, которые я тестировал:
- Имя ключа конвертера не имеет значения
- Тип преобразователя и/или реализация метода не имеют значения.
- Элемент ItemsControl, имеющий привязанный ItemsSource, а не жестко запрограммированные записи, не имеет значения. не имеет значения
- Фактическое содержимое внутри Grid не имеет значения
...Ух ты. Просто вау. Что это это? Я мертв? Я мечтаю? Первоапрельский день запрограммирован в WPF, но он содержит ошибки (как и все остальное) и наступил на месяц позже? Может кто-нибудь объяснить это? Я схожу с ума.
Файл проекта, если это важно:
WinExe
net5.0-windows
true
Подробнее здесь: https://stackoverflow.com/questions/784 ... -disappear