C# 绑定到RelativeSource TemplatedParent在ControlTemplate中不起作用

C# 绑定到RelativeSource TemplatedParent在ControlTemplate中不起作用,c#,xaml,windows-8,windows-runtime,winrt-xaml,C#,Xaml,Windows 8,Windows Runtime,Winrt Xaml,我正在尝试将Silverlight应用程序移植到Metro,并发现在我的ControlTemplate中将我的绑定设置为{binding PropertyName,RelativeSource={RelativeSource TemplatedParent}似乎不起作用,但是{TemplateBinding PropertyName}起作用 这两种方法都可以在Silverlight应用程序中使用,但是我需要使用RelativeSource语法来允许使用Mode=TwoWay 要在ControlT

我正在尝试将Silverlight应用程序移植到Metro,并发现在我的ControlTemplate中将我的绑定设置为
{binding PropertyName,RelativeSource={RelativeSource TemplatedParent}
似乎不起作用,但是
{TemplateBinding PropertyName}
起作用

这两种方法都可以在Silverlight应用程序中使用,但是我需要使用RelativeSource语法来允许使用
Mode=TwoWay


要在ControlTemplate中使用双向绑定,我需要做什么?

如果您正在构建自己的控件-您可以定义模板部分并通过在OnApplyTemplate()覆盖中调用GetTemplateChild()来检索它们-然后只需手动更新属性,而不必依赖绑定。如果您只是重新部署现有控件-也许您可以先对它们进行子类化,或者创建附加的依赖属性/来处理绑定。

我正在尝试在SL5、WP7和Metro之间共享控件逻辑的代码库,因此尝试在ControlTemplate中保留任何与UI相关的内容。也就是说,我已经按照您的建议尝试并在OnApplyTemplate中设置了绑定,但是与ListBox.SelectedItemProperty的双向绑定似乎不起作用,也没有启动我的PropertyChangedCallback。也许这是ListBox控件的一个问题,而不是其他任何问题。尽管如此,我尝试在一个只包含自定义ContentControl的新应用程序中复制它,但它仍然有效。回到绘图板上!但是,将SelectionChanged事件处理程序添加到ListBox并手动更新确实有效。我只需要把这个带到下周要去的Win8开发者夏令营,看看他们有什么要说的!