2012-05-02 79 views
1

我試圖將一個Silverlight應用程序移植到Metro,並且發現在我的ControlTemplate設置中,我的綁定到{Binding PropertyName, RelativeSource={RelativeSource TemplatedParent}}似乎不起作用,但{TemplateBinding PropertyName}的確如此。綁定到RelativeSource TemplatedParent在ControlTemplate中不起作用

這兩個工作都在我的Silverlight應用程序中,但是我需要使用RelativeSource語法來允許使用Mode=TwoWay

我需要做什麼才能在ControlTemplate中使用TwoWay綁定?

回答

2

如果您正在構建自己的控件 - 您可以定義模板部件並通過在您的OnApplyTemplate()重寫中調用GetTemplateChild()來檢索它們 - 然後只需手動更新屬性而不是依賴綁定。如果您只是想重新設計現有的控件 - 也許可以先將它們繼承,或者創建附加的依賴項屬性/ behaviors,以處理綁定。

+0

我試圖在SL5,WP7和Metro之間共享控制邏輯的代碼庫,因此試圖在ControlTemplate中保留任何與UI相關的內容。這就是說,我已經按照你的建議嘗試過了,並在我的OnApplyTemplate中設置了綁定,但是TwoWay綁定到ListBox.SelectedItemProperty似乎沒有工作,並且沒有觸發我的PropertyChangedCallback。也許這是ListBox控件比其他任何問題更多的問題。 –

+0

Scrub,我試圖複製這個只包含一個自定義的ContentControl的新應用程序,它的工作。回到繪圖板! –

+0

然後將一個SelectionChanged事件處理程序添加到ListBox並手動更新確實可行。我只需要把它帶到下週的Win8開發者陣營,看看他們有什麼要說的! –

相關問題