2010-05-03 44 views
4

我正在試圖製作一個條形圖usercontrol。我使用DataTemplate創建每個欄。在DataTemplate中的TemplatedParent綁定的Silverlight RelativeSource,可能嗎?

問題是爲了計算每個酒吧的高度,我首先需要知道它的容器的高度(TemplatedParent)。不幸的是我有:

Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource HeightConverter}, Mode=OneWay}" 

不起作用。每次將NaN的值返回給我的Converter。 RelativeSource={RelativeSource TemplatedParent}在這種情況下不起作用嗎?我還能做些什麼來允許我的DataTemplate與它正在應用的元素「交談」?

櫃面它幫助這裏是準系統的DataTemplate:

<DataTemplate x:Key="BarGraphTemplate"> 
    <Grid Width="30"> 
     <Rectangle HorizontalAlignment="Center" Stroke="Black" Width="20" Height="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={StaticResource HeightConverter}, Mode=OneWay}" VerticalAlignment="Bottom" /> 
    </Grid> 
</DataTemplate> 

回答

5

要回答你的問題的RelativeSource只能在一個ControlTemplate它不會在DataTemplate工作。

是否有一個原因,Silverlight Toolkit Chart控件在創建條形圖時不起作用(或者是Tookit引用垂直條形的柱形圖)。

+0

直到現在我從來沒有聽說過Silverlight Toolkit圖表控件。看起來很有趣,但是一個BarChart應該足夠簡單,可以處理userControl。我只是希望DataTemplate有更好的方式來引用應用程序中的其他對象。 DataTemplate看起來很孤立,很難創建真正的動態內容。 – 2010-05-04 15:15:13

0

您是否嘗試過ActualHeight屬性?它應該給你一個價值。使用TemplatedParent模式的RelativeSource 工作在數據模板中,但它將返回模板化控件/項目的內容展示器,而不是控件/項目本身(它在控件模板中使用時會執行此操作)。要進行實驗,請在數據模板中放置一個按鈕,然後將該綁定表達式(不含路徑)分配給其Tag屬性。處理它的Click事件,並在事件處理程序中放置一個斷點。現在,當您運行項目並單擊該按鈕時,斷點將在您的代碼中被擊中,並且您可以從按鈕的Tag屬性(您可以從sender參數中看到)看到它綁定到的對象。希望這有助於...

相關問題