使用Infragistics WPF controls遇到BaseOn问题

问题描述

WPF程序中使用Infragistics的控件,需要对控件进行全局的属性设置。一般来说,会想到使用BaseOn默认的Style来进行设置。但是Infragistics使用BaseOn会导致Style直接丢失。特别是在使用了其提供的主题的情况下(废话,不适用主题用它控件干嘛)。

问题分析

常规BaseOn写法

下面的代码对Button进行了背景色设置。由于没有指定Key,如果放在App.xaml中,会对全局程序生效。


同样的写法,用于Infragistics控件

下面代码对ColorPicker是否显示RecentColor进行设置。


    
        
    
    
        
    

当然,需要先在App.xaml.cs中设置主题。

    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            ThemeManager.ApplicationTheme = new RoyalDarkTheme();
            base.OnStartup(e);
        }
    }
运行效果

预期结果

解决方案

ThemeManager中提供一个RegisterControl方法。我们需要在设置主题前对控件进行注册。修改App.xaml.cs。

    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            //Added this line
            ThemeManager.RegisterControl(typeof(XamColorPicker));
            ThemeManager.ApplicationTheme = new RoyalDarkTheme();
            base.OnStartup(e);
        }
    }

问题分析

To be continue.

你可能感兴趣的:(使用Infragistics WPF controls遇到BaseOn问题)