问题描述
|
这是东西:
我有一个菜单/ ContextMenu / MenuItems为模板的项目。
所以基本上我有一个MyMenuItem.xaml / MyMenuItem.xaml.cs文件以及我的MyMenuItem.xaml文件,其中包含一些资源+样式和模板。
问题:我的contextMenu(我承认相当大,但仍然...)花费了大约14秒的加载时间(!!)
我进行了一些分析,发现这一行:
MyMenuItem item = new MyMenuItem();
在那14秒内占据了UC的65%。因此,我尝试摆脱MyMenuItem.xaml中的样式,模板和资源,实际上,我花了0.3秒的时间来加载菜单。因此,然后我将这些样式/模板放入App.xaml中,并设法获得所需的设计,但具有预期的性能。
我的问题是:怎么会?
为什么不能将menuItem样式放入MyMenuItem.xaml文件中,而必须将它们放入App.xaml中才能获得良好的性能?比我不理解的这里发生了什么?
再往前走,我推断出我其他控件的所有其他样式实际上可能都存在相同的问题,因此我应该将所有模板/样式放在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>
问题出在everything2ѭ中(包括样式1,2和3)
解决方法
如果在菜单级别声明资源,则将为菜单的每个实例创建这些资源。在应用程序级别对其进行声明,将创建一个资源实例并在所有菜单之间共享。基本上,您希望将资源尽可能地移到逻辑树上,以便最大程度地共享这些资源。
就是说,14听起来太过分了,所以我只能假设您那里有很多相当庞大的资源。