2011-06-14 43 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

相关问题