我在寫一個不尋常的控件,它使用通常的Generic.xaml來應用默認的控件模板。無法控制的ControlTemplate的代碼隱藏?
此控件模板需要一些代碼隱藏以呈現其本身(主要是爲了響應調整大小事件),但我很困惑我應該把代碼放在哪裏,以及我如何從中訪問模板。
此代碼僅用於渲染此特定模板,因此不屬於控件本身。
任何人都可以給我一個線索嗎?
我在寫一個不尋常的控件,它使用通常的Generic.xaml來應用默認的控件模板。無法控制的ControlTemplate的代碼隱藏?
此控件模板需要一些代碼隱藏以呈現其本身(主要是爲了響應調整大小事件),但我很困惑我應該把代碼放在哪裏,以及我如何從中訪問模板。
此代碼僅用於渲染此特定模板,因此不屬於控件本身。
任何人都可以給我一個線索嗎?
我發現了一個很好的鏈接,它使用模板上的附加行爲來解決此問題,以附加一個提供額外功能的ViewModel。通過這種方式,控制本身仍然完全不知道任何模板特定的邏輯:
您可以覆蓋的OnRender方法在你的控制,就像在用戶控件。儘管ControlTemplate中的元素會出現在控件所呈現的任何內容的頂部。
如果您需要在ControlTemplate中的元素上方或之間添加自定義渲染,那麼您必須使用輔助元素作爲命名部分。在blog或mdm20's link(搜索「PART_」)中可以找到命名零件的示例。
然後,您可以根據從控件傳遞下來的設置,讓該輔助元素執行渲染。
非常感謝,但我無法重寫我的控件的OnRender。正如我所說的,該代碼對於控件使用的特定模板是必需的,而不是控件本身。 – GazTheDestroyer
@Gaz - 是否有多個模板? 「特定模板」和其他模板之間有什麼不同? – CodeNaked
會有不止一個是的。這個特定的模板只是另一個像其他所有控件一樣的控件,但是這種特殊的外觀只能在XAML中表達,並且需要隱藏代碼。這是我不確定的背後代碼的位置。 – GazTheDestroyer
你是什麼意思的「渲染」本身做?您是否覆蓋OnRender或者在調整大小時更改佈局? – CodeNaked
是的,如果這是一個用戶控件,我會重寫OnRender(),但是我不知道在通用字典中的樣式應用了ControlTemplate時,該放置代碼的位置。 – GazTheDestroyer