Общие события между несколькими экземплярами пользовательских элементов управления WPF - PullRequest
2 голосов
/ 15 октября 2011

У меня есть пара пользовательских пользовательских элементов управления, написанных на 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 является единственным, который поддерживает автоматический размер столбцов. Первый, кажется, не затронут.

...