Общие события между несколькими экземплярами пользовательских элементов управления WPF

#wpf #custom-controls

#wpf #пользовательские элементы управления

Вопрос:

У меня есть пара пользовательских пользовательских элементов управления, написанных на C # с использованием составной модели пользовательского управления (т. Е. Начиная с UserControl), и при изолированном использовании я не вижу никаких проблем. Но когда два экземпляра одного и того же элемента управления используются в одном родительском элементе, они, похоже, крадут события друг у друга.

Вот пример. У меня есть элемент управления, который использует ListView. В событии LayoutUpdated я обновляю ширину столбцов для настройки содержимого. Не то, чтобы это добавляло какое-либо значение к вопросу, но вот код обработчика:

 var view = transactionListView.View as GridView;
if (view == null) return;
view.Columns[0].Width = view.Columns[0].ActualWidth;
view.Columns[0].Width = double.NaN;
view.Columns[view.Columns.Count - 1].Width = view.Columns[view.Columns.Count - 1].ActualWidth;
view.Columns[view.Columns.Count - 1].Width = double.NaN;
const int dynamicColumnIndex = 2;
try
{
    var dynamicColumnWidth = view.Columns.Where((t, index) => dynamicColumnIndex != index)
       .Aggregate(transactionListView.ActualWidth, (current, t) => current - t.ActualWidth);
    view.Columns[dynamicColumnIndex].Width = dynamicColumnWidth - 25;
}
catch (Exception ex)
{
  // log
}
  

Опять же, приведенный выше пример приведен только для предоставления некоторого контекста, но другие элементы управления, о которых я говорю, содержат совершенно разные реализации.

Я подумал, что если бы я предоставил x:Name для ListView в элементе управления, это могло бы помочь, но это не так. Затем я предоставил x:Name для пользовательского элемента управления, когда я его использую. Никакой разницы.

Результатом использования этого элемента управления с ListView является то, что второй ListView является единственным, который поддерживает автоматический размер столбцов. Первый кажется незатронутым.

Комментарии:

1. В чем именно проблема? Не выполняются ли обработчики событий? Или он просто не делает то, что вы считаете нужным? Не могли бы вы опубликовать короткий код, который фактически воспроизводит проблему?

2. В других случаях поведение более сложное … но в данном случае это довольно прямолинейно. У меня есть два таких элемента управления в одном представлении, первый показывает столбцы с шириной по умолчанию, второй показывает столбцы с автоматической шириной. Приведенный выше фрагмент кода автоматически изменяет размеры этих столбцов. Таким образом, похоже, что второй элемент управления (то есть тот, который был добавлен последним), вероятно, крадет события первого, поэтому в обоих случаях автоматическая ширина столбца применяется ко второму.

3. вы нашли решение для этого? у меня такая же проблема … = (