[英]WPF Writing custom Control
我想寫一個自定義控件來顯示一棵家譜...所以我看了FamilyShow...。
因此,他們的控件繼承了FrameworkElement,但是每件事都變得非常復雜...是否有任何簡單的教程來展示如何使用子對象實現自定義FrameworkElement等等?
基本上我做不到的是,添加子控件並顯示它們,以及在繪制時獲取子控件的坐標...
我建議看一下使用HierarchicalDataTemplate 。 通常,有一種方法可以只使用帶有分層數據模板的內置控件,而不是生成自定義控件。
考慮到您希望顯示一棵家譜,應該可以直接在標准WPF控件中執行此操作。
完全展開的TreeView控件可用於顯示家譜。 喬什·史密斯(Josh Smith)撰寫了一些文章,介紹如何將其布局更改為可以適應您的需求的家譜常用的布局: http : //www.codeproject.com/KB/WPF/CustomTreeViewLayout.aspx
如果您仍然想學習如何開發自定義控件,那么對於第一個自定義控件而言,選擇一個比家族樹控件更容易的方法。
您正在尋找的是Panel
:它已經公開了UIElementCollection
類型的Children
屬性,因此您所需要做的就是添加子項並覆蓋兩個方法:
MeasureOverride計算面板的所需大小。 您可以返回任意大小。 要占用所有可用空間,只需返回約束:
protected virtual Size MeasureOverride(Size availableSize)
{
return availableSize;
}
ArrangeOverride將每個孩子的位置計算為Rect。 您可以輕松使用附加屬性為每個孩子存儲其他數據。 這可以是公共可見的數據,例如DockPanel.Dock或Canvas.Top,也可以是用於記住所有內容以及原因的私有數據。 ArrangeOverride的框架是:
protected virtual Size ArrangeOverride(Size finalSize)
{
foreach(UIElement child in Children)
{
Rect childLocation = ... code to compute child location ...
child.Arrange(childLocation);
}
return finalSize;
}
對於繪制線,可以使用子控件,也可以簡單地重寫OnRender
並將線直接繪制到DrawingContext
。 總是在ArrangeOverride
完成后調用OnRender
並且可以訪問子級的實際位置。
有關詳細的教程,請使用“ WPF面板教程”或“ WPF自定義面板教程”。 這看起來不錯 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.