在撰寫自訂 WPF 控制項(如帶水印的密碼框)時,TemplateBinding 若使用不當會導致屬性值無法正確傳遞至範本內部元素。本文以一個水印密碼框案例說明問題成因與解決之道。
PassText,卻得到預設值而非使用者輸入值。

TemplateBinding 屬於單向綁定,且僅在控制項實例化時從父控制項取值一次。若依賴屬性(如 PassText)在範本內部元素(如 PasswordBox)上透過 TemplateBinding 綁定,內部元素的值變更**不會**回寫至父控制項的依賴屬性。
改用 {Binding RelativeSource={RelativeSource TemplatedParent}, Path=PassText, Mode=TwoWay},明確指定雙向綁定與來源,確保值能雙向流動。
關鍵差異:
TemplateBinding = 單向、一次性、效能較好但功能受限。Binding ... Mode=TwoWay = 雙向、即時同步、適用於需回寫的情境。