2013-11-21 68 views
0

我正在創建自定義控件。並突然面臨一個問題:爲什麼把控制的風格與控制分開? 我的意思是說,使用標準的方法,您必須:從基本控件派生(例如,從TextBox)並在general.xaml中爲其添加樣式。 但爲什麼我們不能做的就像這樣:在自定義控件中放置樣式

<TextBox x:Class="CustomTest.CoolTextBox" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <TextBox.Style> 
     <Style> 
      <Setter Property="TextBox.FontSize" Value="20" /> 
     </Style> 
    </TextBox.Style> 
</TextBox> 

和代碼隱藏:

public partial class CoolTextBox : TextBox 
{ 
    public CoolTextBox() 
    { 
     InitializeComponent(); 
    } 
} 

更新#1

我不寫我自己的庫,但創建我的主要可執行文件中的自定義控件應用程序支持主題,但它們只有顏色不同。所以每個主題都是一組畫筆資源,我的風格將使用DynamicResource來引用它們。

我想知道的是該解決方案的缺點。我的意思是性能,使用簡單等。

回答

1

WPF允許在運行時更改主題,意味着樣式應與控件分開存儲。而且,當爲其他程序員設計自己的自定義樣式時,控件應該是無形的,儘管應該有一個默認樣式,必須將其獨立地存儲在Generic.xaml文件中。如果您的應用不支持更改主題,那麼您可以根據需要定義樣式。

如果您正在編寫自定義控件庫,我建議您堅持標準。

這裏是一個鏈接,如何將一個自定義的控件創建:

http://wpftutorial.net/HowToCreateACustomControl.html

+0

感謝您的回答!請參閱更新#1 –

+0

DynamicResources比StaticResources慢並且應該避免。 –

+0

同意!但在目前的項目中並沒有太多的控制措施,而且這種放緩是無形的。 –

0

除了開發刺蝟的回答關於性能,我發現以下缺點:

  1. Style對象對於每個控制的實例都是自己的。所以你最終得到的是相同Style對象的克隆數量。
  2. 您無法使用BasedOn屬性重寫樣式。只有完全更換是可能的。
相關問題