如何在 WPF 中實現自定義畫筆?
我在哪裡可以找到有關畫筆如何實現我自己的 System.Windows.Media.Brush 的足夠資訊?我可以處理所有可冷凍的行李,但我需要覆蓋什麼才能讓它工作並不是很明顯。
是的,所以我並不是說我想使用預定義的畫筆。我想擴展 System.Windows.Media.Brush,它是一個抽像類。這一切純粹是為了我自己的熏陶。我什至不確定我能做什麼樣的刷子。我只是想了解刷子是如何工作的。如:
public AwesomeBrush : Brush { protected override Freezable CreateInstanceCore() { return new AwesomeBrush(); } ... // concrete brush stuff }
我使用Reflector快速瀏覽了現有的畫筆。看起來他們的實現非常封閉,並且依賴於大量的
internal管道。雖然可以實現自己的畫筆,但它似乎不是一個受支持的選項。甚至可能是 WPF 控制項與現有畫筆緊密相關,無法與自定義畫筆一起使用。實現類似於自定義畫筆的最佳方式很可能是使用帶有一些複雜繪圖邏輯的DrawingBrush 。您可以使用其他畫筆從復雜的形狀組成繪圖畫筆,這樣您就可以實現所需的目標。
修改後更新
由於這是用於教育,您最好下載反射器並使用它來查看畫筆的工作原理。它們並不是要自行實現的,而且由於它們依賴於
internal程序員通常無法訪問的某些類,因此很難做到這一點。雖然有趣的是,Brush 文件確實有一條註釋供繼承者以正確的方式從 Brush 繼承。
更多更新
當我四處尋找時,我發現了一種在中文部落格上實現類似目標的非常巧妙的方法。訣竅是使用標記擴展,所以它看起來就像一個畫筆。實際上,它會根據其屬性創建一個新的圖像畫筆。似乎他得出了同樣的結論,即有一些內部類阻礙了簡單的實現。
要回答為什麼您可能想要自定義畫筆的問題,請考慮一個複雜的幾何圖形,並且您希望使用與形狀匹配的漸變填充它,同時從形狀的中心(或任何任意起點)徑向更改顏色。
沒有辦法用靜態填充來做到這一點(這幾乎消除了所有現有的畫筆)。沒有一遍又一遍地複制對象並將它們嵌套(並製定外殼以使其看起來都正確),用不同的顏色填充每個對象,唯一實用的方法是使用可以查看正在填充的對象的刷子.
這實際上在 Forms 中是可行的。
但看起來在 WPF 中沒有任何方法可以做到這一點,這是不幸的。
事實上,WPF 的畫筆同時具有驚人的強大功能和驚人的局限性。它們顯然是為某些概念模型設計的,但我完全不確定它是否有用,除了一些非常微不足道的視覺效果,而且像往常一樣,它變得更加複雜,帶有奇怪的(記錄不充分的)參數,這使得做簡單,有些複雜。