簡體   English   中英

WPF編寫自定義控件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM