【问题标题】:Prevent UserControl from loading ResourceDictionaries防止 UserControl 加载 ResourceDictionaries
【发布时间】:2017-01-30 16:30:51
【问题描述】:

我目前正在使用线程实现打印。到目前为止,(几乎)没有问题。
我被 xaml 解析异常卡住了一段时间,尽管我通过将 ResourceDictionaries 添加到我要打印的视图来修复它。该视图显然将尝试在其InitializeComponent 调用中加载在测试项目的app.xaml 中定义的ResourceDictionaries。
我们正在使用可以在运行时更改的主题。它们也有一些全局样式。

现在问题...有没有办法可以阻止UserControl 加载app.xaml 中定义的ResourceDictionaries 或InitializeComponent 中的任何其他位置?

基本上应用程序中的所有视图都使用带有样式的当前主题,用于打印的UserControls 应该不使用样式,并且根本不使用ResourceDictionary

【问题讨论】:

  • 字典的工作方式是它们向下级联可视树,因此如果您的控件有一个带有正确键的字典,则返回值,如果没有,则询问父级,然后询问父级父级,依此类推,直到它到达应用程序,因此您无法阻止它从应用程序加载,但您可以在本地覆盖应用程序的资源

标签: c# wpf xaml mvvm resourcedictionary


【解决方案1】:

我通过创建一个新主题“解决”了这个问题,该主题默认覆盖所有使用的控件样式。只有在 UserControl 资源中包含此 ResourceDictionary 才会使用 WPF 默认样式。

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyAssembly;component/Themes/Theme.Nothing.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

几行ResourceDictionary:

<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}"/>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2011-12-04
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多