DataTemplate中的TemplatedParent绑定的Silverlight RelativeSource,是否可能?

时间:2010-05-03 16:40:17

标签: wpf silverlight binding relativesource

我正在尝试制作条形图用户控件。我正在使用DataTemplate创建每个栏。

问题是为了计算每个柱的高度,我首先需要知道其容器的高度(TemplatedParent)。不幸的是我有:

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

不起作用。每次将值NaN返回到我的转换器。 RelativeSource={RelativeSource TemplatedParent}在这种情况下不起作用吗?我还能做些什么来让我的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>

2 个答案:

答案 0 :(得分:5)

要回答您的问题,RelativeSource仅适用于ControlTemplate,但在DataTemplate中不起作用。

在创建条形图时,Silverlight Toolkit Chart控件是否有效的原因(或者作为Tookit引用垂直条形图的柱形图)。

答案 1 :(得分:0)

您是否尝试过ActualHeight属性?它应该返回一个值。具有TemplatedParent模式的RelativeSource将在数据模板中工作,但它将返回模板化控件/项的内容呈现器,而不是控件/项本身(在控件模板中使用时) 。要进行实验,请在数据模板中放置一个按钮,并将该绑定表达式(不带路径)分配给其Tag属性。处理其Click事件,并在事件处理程序中放置一个断点。现在,当您运行项目并单击该按钮时,断点将在您的代码中被命中,您可以从按钮的Tag属性(您可以从sender参数中看到)查看它所绑定的对象。希望这会有所帮助...