对不起,如果这个问题过于简单,但我很难弄清楚如何创建背景来控制 - 希望能够提高应用性能。皮肤控制背景 - 更好的性能?
我有9个不同的控件。他们都有背景。背景由图像,其他控件或两者组成。所有这些背景都有另一个背景。
想想像Powerpoint这样的幻灯片,幻灯片布局和幻灯片母版 - 按此顺序继承。我有9张幻灯片/控件。
- 第3个控制具有相同的 “控制布局”(姑且称之为 ControlLayout1)。 ControlLayout1从ControlMaster1获取它的一些元素。
- 第二个3控件也具有相同的控件布局,但它与第一个控件不同。我们称之为ControlLayout2。它也 继承自ControlMaster1。
- 3个控件的最终集合再次不同。我们可以称它们为 ControlLayout3。但是这一次,他们继承了不同的主人 - ControlMaster2。
现在在每个控件中,我每次都单独写出所有的XAML。我认为必须有一种方法,不要在每个项目中写入这些内容。理想情况下,我想创建的是一组可重用的XAML。
下面是一些伪XAML:
然后某处ControlLayouts(我不知道,像Application.Resources或其他地方)
<Canvas x:Name="ControlLayout1">
<MyMasterBackground (ControlMaster1)/>
</Canvas>
<Canvas x:Name="ControlLayout2">
<MyMasterBackground (ControlMaster1)/>
<TextBox Text="The Control 2">
</Canvas>
<Canvas x:Name="ControlLayout3">
<MyMasterBackground (ControlMaster2)/>
<TextBox Text="The Control 3">
</Canvas>
再来说ControlMasters
<Canvas x:Name="ControlMaster1">
<Canvas.Background>
<ImageBrush ImageSource="/Images/image1.jpg" />
</Canvas.Background>
</Canvas>
<Canvas x:Name="ControlMaster2">
<Canvas.Background>
<ImageBrush ImageSource="/Images/image2.jpg" />
</Canvas.Background>
<TextBox Text="Control Master 1">
</Canvas>
一旦定义,ControlLayouts和ControlMaster永远不需要改变 - 它们是静态的。
除了只有一个较小的XAP,如果我可以将这些全部放在一个位置并重用XAML,我希望在我的应用程序中提高性能,因为ControlLayouts会自动获取BitmapCached或类似的东西。所以首先,是否有一个很好的策略来实现上述(ControlLayouts和Masters没有任何代码隐藏)?其次,在加载Control1,Control2等时性能会得到改善?最后,如果它们是纯粹的usercontrols(即它们有一些代码),那对性能会更好吗?
在此先感谢!
如果你想让静态的东西成为BitmapCached,你应该手动设置它。某些东西是[自动缓存](http://msdn.microsoft.com/en-us/library/ff602285(v = vs.95).aspx),但根据我的经验手动设置它可以产生很大的差异,尤其是当您将UI元素转移到很多地方并看到生涩的表现时。 – 2012-02-23 04:45:40