2009-06-08 46 views
1

我是WPF的新手,我對修改控件有疑問。我開始知道可以通過更改控件控制模板來修改控件。即,通過改變控件模板和添加子控件來修改控件有什麼區別

<Button> 
    <Button.Template> 
    <ControlTemplate> 
     ... 
    </ControlTemplate> 
    </Button.Template> 
</Button> 

此外,我們可以編輯利用內容模型的控制。即

<Button> 
    <Grid> 
    <CheckBox> 
    </CheckBox> 
    <RadioButton> 
    </RadioButton> 
    ... 
    </Grid> 
</Button> 

這兩種技術有什麼區別。哪一個是在WPF中定製控件的正確方法。請幫助我更好地理解這一點。

回答

3

這兩件事之間的主要區別在於ControlTemplate定義了控件的外觀。它實際上並不是將內容放置在其中。在內容控制的某個位置,應該有某種形式的ContentPresenter。內置的控件能夠實現這一功能,因爲它們被稱爲'lookless controls',並且創建的任何自定義控件也應該是無形的。當控件不是以一種不尋常的方式模板化,而是具有靜態佈局時,則可能會發生混淆。

至於正確方式做事情,這取決於你想要實現的。如果您試圖更改控件,例如外觀和感覺或行爲,那麼using a ControlTemplate(或DataTemplate,取決於您的模板)絕對是您的選擇。一個很好的例子就是CheckBox,不管你是否相信,CheckBox實際上是一個ToggleButton(more or less),through templating顯示在bullet中的可玩性。 Here's另一個很好的例子,你如何使用模板來做一些非常漂亮的事情。

ControlTemplates也應該是applied through Styles,而不是直接在元素上設置。

如果您實際上並不打算修改控件的行爲或外觀,那麼使用內容模型是正確的方法。

WPF does this better then Silverlight,雖然我不知道SL3是否有改進。

0

模板可以放入資源並重新用於另一個按鈕。

直接更改內容不可重複使用,除非您將UserControl置於其外。

你使用哪一個取決於具體的任務和你的個人喜好。

+0

通過將元素定義爲資源並使用ContentControls,或將內容分配爲DataTemplate,控件的內容肯定是可重用的。 – rmoore 2009-06-08 07:58:14

1

我的經驗法則是,如果可以在不更改控件模板的情況下獲得我想要的內容,則不應更改控件模板。

控件模板是一種改變外觀的方式,例如製作一個圓形按鈕來更改複選框的複選標記圖形。

在控件中添加控件更簡單,例如在按鈕內放置圖像。

另外請記住,控制模板中有很多功能,包括填充,內容對齊,禁用外觀等,如果更改控制模板,您將不得不添加對所有這些功能的支持。

相關問題