2016-01-19 100 views
0

我有以下佈局用於顯示多頻道信息的屏幕(類似於音頻軌道):綁定佈局屬性

  1. MultiChannelPlotterControl包含在底部和含N SingleChannelPlotterControl實例一個HorizontalRuler實例UniformGrid ;
  2. 每個SingleChannelPlotterControl有一個VerticalRuler左對齊的實例;

enter image description here

的問題是:

  1. 每個垂直標尺可以有不同的寬度,但我想他們都伸展到最大寬度,使他們能夠適應,但由於它們如果我決定將它們放在一個不同的容器中,它們將不再是SingleChannelPlotterControl的一部分;
  2. 左下角有一個矩形區域。這應該與VerticalRuler具有相同的寬度,但在佈局樹中它仍然更高。它目前是空的,但我可以在那裏放一些東西並綁定它的寬度,例如;

所以,問題是:

我怎麼能佈局/元素綁定/風格這些控制,使得垂直標尺的右邊緣一直相互對齊(擬合的最寬)與水平尺的左邊緣?

編輯: 我想我可以在MultiChannelPlotterControl創建一個「LeftPanelWidth」的DependencyProperty,並在其吸氣劑使用的一些VisualTreeHelper巫術得到ActualWidths爲每VerticalRuler裏面,但我會如何選擇最大寬度並設置寬度其他?

回答

0

您可以嘗試在列定義上使用SharedSizeGroup屬性。您必須在正確的父容器上設置IsSharedSizeScope = True。

+0

感謝您的回答!我沒有列定義。 SingleChannelPlotter控件的容器是具有單列的UniformGrid。每個SingleChannelPlotter控件的LayoutRoot都是一個DockPanel,其第一個子項是VerticalRuler控件。因此,每個VerticalRuler都有自己的寬度,並且不知道其「兄弟」的存在。我想要的是將它們全部綁定在一起以獲得列的_visual effect_的方式。 – heltonbiker

+0

然後,也許最簡單的方法是用網格替換你的DockPanel(你應該能夠得到完全相同的佈局)。然後,您將能夠使用SharedSizeGroup定義第一列。如果您需要更多幫助,只需粘貼您的xaml代碼,以便我可以幫助您做到您想要的。 – Jams

0

我最終通過消除SingleChannelPlotterControl類來解決問題。

相反,我用兩個並排側UniformGrid實例(如兩個ItemsPanelItemsControl實例),設置其ItemsSource在XAML中聲明的同一CollectionViewSource

然後,對每個ItemsControl我宣佈一個不同ItemTemplate,左邊一個包含VerticalRuler,而另一個顯示相同的方式SingleChannelPlotterControl以前做的信號 - 除了它不含有統治者了。