Kac*_*ski 5 c# wpf xaml resourcedictionary
我发现了这篇关于提高ResourceDictionaries网络性能的文章,但问题是它已经很旧了(2011 年)。我正在考虑实现这样的东西,但我想知道 Microsoft 是否没有在 .NET Framework 的最新版本中修复此问题。关于这个话题我有几个问题,希望这里有人能给出答案:
ResourceDictionaries通过创建它们的多个实例(每次将它们分配给控件时一个实例)来进行管理?"CustomButtonStyle"例如,当我在ResourceDictionary名为 的"ButtonStyles"程序集中调用样式,然后在应用程序中"StylesAssembly"引用该样式,并为其分配了 20 个时,这甚至是一个问题吗?App.xamlButtonsCustomButtonStyle"ButtonStyles" ResourceDictionary?感谢@mm8 发布您的答案。这是100%正确的,我只想发布我自己的答案,因为我发现了一些有趣的东西,对其他人可能有用。
答案是:如果在应用程序中引用 ResourceDictionary 实例,则只会创建一次(无论许多控件使用其样式),但每次在应用程序中使用的另一个 ResourceDictionary 中引用它时,都会再次实例化它。
因此,为了给您提供这种情况的示例,假设我们有以下结构:
- StylesAssembly.dll
- ButtonResourceDictionary.xaml
- CustomButtonResourceDictionary.xaml
- Application.exe
- App.xaml
- MainWindow.xaml
Run Code Online (Sandbox Code Playgroud)
ButtonResourceDictionary.xaml有以下代码:
<Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}">
<!-- Some setters -->
</Style>
Run Code Online (Sandbox Code Playgroud)
CustomButtonResourceDictionary.xaml具有以下代码,其中使用ButtonResourceDictionary.xaml:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ButtonResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="CustomButtonStyle" TargetType="{x:Type Button}" BasedOn="{StaticResource DefaultButtonStyle}">
<!-- Some setters -->
</Style>
Run Code Online (Sandbox Code Playgroud)
Application.exe引用了App.xamlStylesAssembly.dll并有以下代码:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/StylesAssembly;component/ButtonResourceDictionary.xaml" />
<ResourceDictionary Source="pack://application:,,,/StylesAssembly;component/CustomButtonResourceDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
现在,如果我们的MainWindow.xaml中有类似的内容,则将ButtonResourceDictionary.xaml只有一个实例:
<StackPanel>
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource DefaultButtonStyle}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
但如果我们的MainWindow.xaml中有类似的内容,则将CustomButtonResourceDictionary.xaml有一个实例,但ButtonResourceDictionary.xaml将有两个实例:
<StackPanel>
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource DefaultButtonStyle}" />
<Button Style="{StaticResource CustomButtonStyle}" />
<Button Style="{StaticResource CustomButtonStyle}" />
<Button Style="{StaticResource CustomButtonStyle}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为前两个Buttons使用DefaultButtonStyle来自 的样式ButtonResourceDictionary.xaml,但另外三个Buttons使用CustomButtonStyle来自 的样式CustomButtonResourceDictionary.xaml,并合并ButtonResourceDictionary.xaml到其代码中。
| 归档时间: |
|
| 查看次数: |
1602 次 |
| 最近记录: |