我有很多“乐趣”试图让我的XAML中的边距(和宽度)与同一应用程序中的其他边距以及相同“套件”应用程序中的其他应用程序中的边距一致。
所以我有了将边距定义为staticresources的想法:
<Thickness x:Key="MarginDetailTabPageContent">0</Thickness>
<Thickness x:Key="MarginLeftHeader">2,4,2,2</Thickness>
<Thickness x:Key="MarginAdditionalInfoOnTop">1,2,2,0</Thickness>
<Thickness x:Key="MarginSmallHeaderOnTop">1,2,2,0</Thickness>
<Thickness x:Key="MarginFieldWithAdditionalMarginOnTop">0,0,2,2</Thickness>
<System:Double x:Key="WidthSmallField">70</System:Double>
..然后我计划在我的应用程序中的几乎所有控件上随处使用这些静态资源..标签,文本块,文本框,复选框..
但在我做出这个相当耗时的改变之前,我希望你的专家意见如何影响表现。
在某种程度上,在我看来,我已经决定使用staticresource - 编写<TextBlock Margin="{StaticResource=MarginLeftHeader}" ... />
而不是<TextBlock Margin="2,4,2,2" ... />
- 到处花费至少为每个使用它的地方调用某个函数。这是对的吗?
总体问题是:用户是否能够感受到性能的任何变化(更糟糕的是......或者更好)?
答案 0 :(得分:1)
在加载实际运行应用程序之前发生的XAML期间,将解析StaticResource并将其分配给该属性。它只会被分配一次,并且忽略对资源字典的任何更改。所以性能没有显着差异;该资源的查找行为类似到编译时查找。
答案 1 :(得分:1)
在您的应用中设置多个<TextBlock Margin="2,4,2,2" ... />
个实例会导致为每个实例创建一个新的独立Thickness
对象。
拥有一个Thickness
资源,以及<TextBlock Margin="{StaticResource MarginLeftHeader}" ... />
的多个实例将只创建一个Thickness
对象,并对其进行多次引用。
一些因素:
Thickness
个对象。)Thickness
个对象而不是查找资源。我的直觉是,对于一个简单的Thickness
结构,第一个选项可能实际上表现更好(而对于更复杂的基于类的对象可能会有所不同)。总而言之,因为您处理的是仅有四个Thickness
值的简单double
结构,内存和性能差异可能相当微不足道,所以您可以选择哪个!