2016-01-19 3 views
0

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

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

enter image description here

Проблемы:

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

Так что вопрос:

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

EDIT: Я предполагаю, что я мог бы создать «LeftPanelWidth» DependencyProperty на MultiChannelPlotterControl, и на его использование геттерного некоторые VisualTreeHelper колдовство, чтобы получить ActualWidths для каждого VerticalRuler внутри, но как бы я выбрал самую большую ширину и установите ширина других?

ответ

0

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

+0

Спасибо за ваш ответ! У меня нет определения столбца. Контейнер элементов управления SingleChannelPlotter представляет собой UniformGrid с одним столбцом. Каждый LayoutRoot элемента управления SingleChannelPlotter является DockPanel, первым дочерним элементом которого является элемент управления VerticalRuler. Таким образом, каждый VerticalRuler имеет свою собственную Ширину и не знает о существовании своих «братьев и сестер».То, что я хочу, - это просто способ связать их все вместе, чтобы получить «видимый эффект» столбца. – heltonbiker

+0

Тогда, возможно, самым простым способом было бы заменить DockPanel сеткой (вы должны иметь возможность получить тот же самый макет). Затем вы сможете определить первый столбец с помощью SharedSizeGroup. Если вам нужна дополнительная помощь, просто вставьте свой код xaml, чтобы я мог помочь вам сделать то, что вы хотите. – Jams

0

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

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

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

Смежные вопросы