2010-10-12 103 views
0

我想實現特定於應用程序沒有任何運氣的自定義視圖。這裏是我的問題: 我需要一個自定義視圖,因爲我希望用戶能夠在運行時動態切換視圖。我需要一個自定義視圖(而不僅僅是數據模板),因爲listview佈局必須改變以及Control模板和數據模板。 所有的turorials都說要實現派生自viewbase的Custom類,並重寫DefaultStyleKey和ItemContainerDefaultStyleKey以返回在generic.xaml中定義的ComponentResourceKey。但是,問題是我正在嘗試創建幾個非常特定於該應用程序的視圖。某些畫筆和字體將與應用程序保持一致,並且自定義視圖將使用這些。即我有應用程序級別的Forebrush,Shadowbrush,Deepshadowbrush,TextDecorator等,我希望視圖使用這些。如果視圖將在外部generic.xaml中定義,那麼綁定到這些標記將會非常複雜。此外,無論如何,它會使它們專用(如果它們綁定到這些畫筆上)。 任何人都有一個想法如何定義風格的內部應用程序,將可以在運行時更改?WPF自定義查看沒有Generic.xaml

回答

0

我對你的細節有些困惑,但是你可以在運行時設置ListView的風格,就像這樣...其中CustomStyle是你想要應用到ListView的預定義風格。

ListView view = new ListView(); 
view.Style = CustomStyle; 

DefaultStyleKey適用於自定義控件(這與UserControl不同)。所以說你想要一個叫做Widget的新控件。您將需要爲該Widget定義DefaultStyleKey,因爲它沒有定義默認樣式。 UserControl是控件的集合,因此它沒有預定義的樣式。

另外,您可以創建一個ResourceDictionary以分開您的樣式。然後你可以通過App.xaml合併它們...

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Themes/Generic.xaml"/> 
       <ResourceDictionary Source="Themes/ListViewStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
+0

我可能不會很好地解釋我自己。我需要自定義視圖(派生自ViewBase)因爲我需要改變視圖(而不是列表框)中的幾乎所有內容,例如選擇事件和麪板。我可能能夠在列表視圖上單獨設置它們,而不是提供自定義視圖,但是這不會給我所需的邏輯分組。我希望每個視圖都應該有自己的佈局容器,選擇事件,動畫,容器,最後是數據模板。我不能使用上面描述的外部字典(generic.xaml) – Fragilerus 2010-10-12 15:33:40

+0

所以問題的根源在於如何在不使用Generic.xaml的情況下獲得自定義控件類型的默認樣式? – 2010-10-12 15:40:52