2010-05-03 104 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参数中看到)看到它绑定到的对象。希望这有助于...

相关问题