2010-03-28 37 views
0

因此,我正在構建一個UI,讓我可以在對話窗口中查看,也可以嵌入更大頁面的一部分。我在WPF中沒有太多的經驗,但是在ASP.NET中你總是使用UserControls,因爲他們並不是真正的通用UI繼承來繼承(並且UserControl只是一個div)。我應該從堆棧面板而不是堆棧面板,網格或其他UI元素或UserControl繼承嗎?

我的同事寫了很多直接從堆棧面板繼承的控件。這似乎是一種體面的做事方式。但是當我去創建一個我要寫的代碼的控件時,我得到了一個只包含UserControl的對話框,在WPF的上下文中我不太熟悉它。

那麼有人可以向我解釋從構建從用戶控件繼承的控件與直接從stackPanel繼承的控件的區別嗎?

回答

0

在WPF中有很多不同級別的實現控件。根據「WPF in Action」一書,可以使用三種方法:

  1. 用戶控件。這與ASP.NET用戶控件類似。您將與其他控件的組合一起構建控件。
  2. 自定義控件。這是爲了在不同的項目中執行更多可密封和可重用的組件。
  3. FrameworkElement。這是更低級的東西。

從Stackpanel實現的聲音聽起來很像自定義控件方法。這確實取決於您在這三種方法中選擇所需的控制級別,複雜性和可重用性。我個人的經驗:

用戶控件更容易製作,但很難重用,並且不容易將主題應用到它。 (你知道WPF允許相同的控件有不同的呈現方式 - 進一步閱讀:WPF中的模板);自定義控件(你可以繼承控件,面板,網格,其他控件)給予重用,重新主題等的能力。

回到你的問題。答案是,取決於你需要什麼。如果你只是想在asp.net中使用類似於usercontrol的東西,那麼在wpf中使用usercontrol。我不會從堆棧面板或網格繼承,除非我需要替代堆棧面板或網格,請將佈局留給設計人員來擔心。

+0

自定義控件不直接關於可重用性 - 自定義控件是關於*模板*的,即控件的消費者改變其視覺外觀的能力。我認爲這提高了可重用性,因爲它意味着只要行爲保持適當,消費者就可以將控件用於更廣泛的顯示工作,但這是我認爲值得確認的特定形式的可重用性。 (從某種意義上講,這意味着自定義控件不容易被「密封」,因爲它們必須應付用戶對它們施加任意可見的樹木)! – itowlson 2010-03-28 03:03:55

1

從StackPanel繼承只是一個好主意,如果你想在StackPanel上編寫一個變體。

WPF編程與HTML頁面設計非常相似 - 您可以使用語義結構並使用單獨的樣式處理外觀,也可以交織邏輯和樣式。

您的自定義控件有責任提供一些行爲和數據,可能只是通過綁定數據。根據這些工作量,它可能僅僅是一個類標識符和一個默認模板。

WPF中最重要的想法之一是你可以使用控件和數據模板來改變外觀。

我推薦學習this tutorial和Christian Moser的article圖。