Связывание свойств макета различных пользовательских элементов управления
У меня есть следующий макет для экрана, отображающего многоканальную информацию (аналогично звуковым дорожкам):
MultiChannelPlotterControl
содержит одинHorizontalRuler
экземпляр на дне иUniformGrid
содержащий NSingleChannelPlotterControl
экземпляры;- каждый
SingleChannelPlotterControl
имеет один экземплярVerticalRuler
выровнен по левому краю;
Проблемы:
- Каждая вертикальная линейка может иметь различную ширину, но я бы хотел, чтобы они все растянулись до максимальной ширины, чтобы они могли поместиться, но, поскольку они находятся на разных элементах управления, я не могу поместить их в один и тот же контейнер (другой
UniformGrid
, например. Теперь, если я решу собрать их в другой контейнер, они не будут частьюSingleChannelPlotterControl
больше; - В левом нижнем углу прямоугольная область. Предполагается, что он имеет одинаковую ширину VerticalRuler (ов), но он все еще выше в дереве компоновки. В настоящее время он пуст, но я мог бы что-то поместить туда и связать его ширину, например;
Итак, вопрос:
Как можно расположить / связать / стилизовать эти элементы управления так, чтобы правый край вертикальных линейок был выровнен относительно друг друга (в соответствии с самым широким) и с левым краем горизонтальной линейки?
РЕДАКТИРОВАТЬ: Я думаю, я мог бы создать DependencyProperty LeftPanelWidth на MultiChannelPlotterControl
, а на своем геттере использовать некоторые VisualTreeHelper
Волшебство, чтобы получить ActualWidths для каждого VerticalRuler внутри, но как бы я выбрал наибольшую ширину и установить ширину других?
2 ответа
Я решил проблему, устранив SingleChannelPlotterControl
учебный класс.
Вместо этого я использую два бок о бок UniformGrid
экземпляры (как ItemsPanel
из двух ItemsControl
экземпляры), установив их ItemsSource
к тому же CollectionViewSource
объявлено в XAML.
Тогда для каждого ItemsControl
Я объявляю другое ItemTemplate
левый, содержащий VerticalRuler
и другой, отображающий сигналы таким же образом SingleChannelPlotterControl
делал раньше - за исключением того, что он больше не содержит правителя.
Вы можете попытаться использовать свойство SharedSizeGroup в определении столбца. Вам нужно установить IsSharedSizeScope=True для правильного родительского контейнера.