2011-06-14 46 views
2

這裏的東西:爲什麼將資源放入我的APP.xaml而不是WPF中的MyClass.xaml更快?

我有一個項目,其中我的菜單/ ContextMenu/MenuItems模板化。

所以基本上我有一個MyMenuItem.xaml/MyMenuItem.xaml.cs文件夫婦含有一些資源+風格和模板我MyMenuItem.xaml文件。

問題:我的文本菜單(相當巨大的,我承認,但仍...)花了大約14sec加載(!!)

我做了一些分析,發現這一行:MyMenuItem item = new MyMenuItem();了65%的UC對於那些14秒。所以我試圖擺脫MyMenuItem.xaml中的樣式,模板和資源,事實上,我已經下降到0.3秒來加載菜單。然後我將這些樣式/模板放在App.xaml中,並設法按照我的想法獲得設計,但是具有預期的性能。

我的問題是:怎麼回事?

我怎麼就不能把我的菜單項的風格在我MyMenuItem.xaml文件,必須把他們在App.xaml中取得好PERF?這裏發生的事情比我不瞭解的還要多?我推斷我的其他控件的所有其他樣式實際上可能有相同的問題,因此我應該將所有模板/樣式放在App.xaml中,這樣就會失去目的其對於每個控制的.xaml/.xaml.cs夫婦

我失去了什麼/做錯了什麼?

編輯:以防萬一,這裏是我的MyMenuItem.xaml文件的樣機:

<MyMenuItem ...> 
    <MyMenuItem.Resources> 
     <Style x:Key="Style1" /> 
     <Style x:Key="Style2" /> 
     <Style x:Key="Style3" /> 
    </MyMenuItem.Resources> 
    <MyMenuItem.Style> 
     <Style TargetType="MenuItem"> 
      <Setter Property=Template> 
       <Setter.Value> 
        <ControlTemplate TargetType="MenuItem"> 

        <!--here I'm using Styles 1,2 and 3--> 

        </ControlTemplate> 
      </Setter.Value> 
      </Setter> 
     </Style> 
    </MyMenuItem.Style> 
</MyMenuItem> 

,但問題的一切,包括MyMenuItem.Resources(即:風格1,2和3)

回答

1

如果您在菜單級別聲明你的資源,這些資源將被用於菜單的每個實例創建。在應用程序級別聲明它,並且將在所有菜單上創建和共享單個資源實例。基本上,您希望將資源移動到邏輯樹的最上方,這樣可以最大限度地共享這些資源。

這就是說,14s的聲音過大,所以我只能假設你已經在那裏了一些相當沉重的資源。

+0

是的,我已經得到了相當沉重的資源,我的菜單包含約400的菜單項(含子菜單等)。但作爲一般事物,我覺得有些困惑,我無法將自己的資源放在菜單的層面上,這在維護性方面會更有意義......(也許使用xaml屬性將資源標記爲Static,以便它只被創建一次)。在這裏,我將擁有空的MyClass.xaml文件和一個帶有3000行的App.xaml ...這是一種非實際的方式(是的,我知道資源字典,我會用它們來劃分我的代碼但仍然...) – David 2011-06-14 12:27:08

相關問題