C# 防止UserControl加载资源字典
我目前正在使用线程实现打印。到目前为止(几乎)没有问题。C# 防止UserControl加载资源字典,c#,wpf,xaml,mvvm,resourcedictionary,C#,Wpf,Xaml,Mvvm,Resourcedictionary,我目前正在使用线程实现打印。到目前为止(几乎)没有问题。 虽然我通过向要打印的视图中添加ResourceDictionaries来修复xaml解析异常,但我还是遇到了一些问题。视图显然要尝试加载测试项目的app.xaml调用中的InitializeComponent中定义的ResourceDictionary 我们使用的主题可以在运行时更改。它们也有一些全球风格 现在来谈谈这个问题。。。有什么方法可以防止UserControl加载app.xaml中定义的ResourceDictionary,或者
虽然我通过向要打印的视图中添加ResourceDictionaries来修复xaml解析异常,但我还是遇到了一些问题。视图显然要尝试加载测试项目的
app.xaml
调用中的InitializeComponent
中定义的ResourceDictionary
我们使用的主题可以在运行时更改。它们也有一些全球风格
现在来谈谈这个问题。。。有什么方法可以防止UserControl
加载app.xaml
中定义的ResourceDictionary,或者从InitializeComponent
中的任何其他位置加载
基本上,应用程序中的所有视图都使用带有样式的当前主题,用于打印的UserControl
s不应使用任何样式,也不应使用ResourceDictionary
。I通过创建一个新主题来“解决”问题,该主题默认覆盖所有使用的控件样式。只有将此ResourceDictionary
包含在UserControl
资源中,才会使用WPF默认样式
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyAssembly;component/Themes/Theme.Nothing.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
字典的工作方式是,它们沿着可视树级联,因此如果控件有一个具有正确键的字典,则返回该值,如果没有,则它会询问父级,然后询问父级,依此类推,直到它命中应用程序,因此您无法阻止它从应用程序加载,但您可以在本地覆盖应用程序的资源
<Style TargetType="{x:Type Slider}"/>
<Style TargetType="{x:Type TabControl}"/>
<Style TargetType="{x:Type TabItem}"/>
<Style TargetType="{x:Type TextBlock}"/>
<Style TargetType="{x:Type TextBox}"/>
<Style TargetType="{x:Type ToolTip}"/>