Связывание свойств макета различных пользовательских элементов управления

У меня есть следующий макет для экрана, отображающего многоканальную информацию (аналогично звуковым дорожкам):

  1. MultiChannelPlotterControl содержит один HorizontalRuler экземпляр на дне и UniformGrid содержащий N SingleChannelPlotterControl экземпляры;
  2. каждый SingleChannelPlotterControl имеет один экземпляр VerticalRuler выровнен по левому краю;

Проблемы:

  1. Каждая вертикальная линейка может иметь различную ширину, но я бы хотел, чтобы они все растянулись до максимальной ширины, чтобы они могли поместиться, но, поскольку они находятся на разных элементах управления, я не могу поместить их в один и тот же контейнер (другой UniformGrid, например. Теперь, если я решу собрать их в другой контейнер, они не будут частью SingleChannelPlotterControl больше;
  2. В левом нижнем углу прямоугольная область. Предполагается, что он имеет одинаковую ширину VerticalRuler (ов), но он все еще выше в дереве компоновки. В настоящее время он пуст, но я мог бы что-то поместить туда и связать его ширину, например;

Итак, вопрос:

Как можно расположить / связать / стилизовать эти элементы управления так, чтобы правый край вертикальных линейок был выровнен относительно друг друга (в соответствии с самым широким) и с левым краем горизонтальной линейки?

РЕДАКТИРОВАТЬ: Я думаю, я мог бы создать DependencyProperty LeftPanelWidth на MultiChannelPlotterControl, а на своем геттере использовать некоторые VisualTreeHelper Волшебство, чтобы получить ActualWidths для каждого VerticalRuler внутри, но как бы я выбрал наибольшую ширину и установить ширину других?

2 ответа

Я решил проблему, устранив SingleChannelPlotterControl учебный класс.

Вместо этого я использую два бок о бок UniformGrid экземпляры (как ItemsPanel из двух ItemsControl экземпляры), установив их ItemsSource к тому же CollectionViewSource объявлено в XAML.

Тогда для каждого ItemsControl Я объявляю другое ItemTemplateлевый, содержащий VerticalRulerи другой, отображающий сигналы таким же образом SingleChannelPlotterControl делал раньше - за исключением того, что он больше не содержит правителя.

Вы можете попытаться использовать свойство SharedSizeGroup в определении столбца. Вам нужно установить IsSharedSizeScope=True для правильного родительского контейнера.

Другие вопросы по тегам