如何在Telerik WinForms中切换主题?

时间:2010-12-08 22:39:11

标签: winforms telerik

如何告诉Telerik WinForms使用哪个主题?

我创建了一个新的WinForms项目,并在表单上删除了一个RadPageView,但是一直有5像素的死区空间,标签几乎是他们需要的两倍高,而且一切都很闪亮蓝色。即使除了浪费的空间,所有这些蓝色的东西在我们的应用程序中看起来非常不合适。我只想要一个标准的Windows外观,我假设实现这一目标的方法是选择一个不同的,不那么蓝,不那么闪亮的主题。 (或者还有另一种方式吗?)

这是我尝试过的:

  • 我尝试将EnableTheming设置为False,但是标签根本没有边框,因此绝对没有任何指示可以点击的位置或哪个标签处于活动状态 - 根本没有任何优点。
  • 我可以在Property Grid中下拉ThemeName属性,但唯一的选项是“Reset”和“ControlDefault”。两个设置都没有做任何事情(即使EnableTheming设置回True)。
  • 工具箱中有很多主题类(AquaTheme,BreezeTheme等),但在我的表单中添加这些类没有任何区别。我认为它们可能会出现在ThemeName下拉列表中,但它们不会出现。
  • 我尝试在我的表单上删除RadThemeManager,但它只有一个LoadedThemes集合,它是空的。我可以添加一些东西,但只是添加了一个ThemeSource,并设置其中一个似乎涉及浏览到一个文件,我没有任何主题文件可供浏览。
  • RadPageView上有一个ThemeClassName属性,但它只是一个字符串(默认为Telerik.WinControls.UI.RadPageView),我不知道我可能会改变它,或者它甚至与主题有什么关系。

这太荒谬了。我想要的是一个看起来像标签控件的标签控件!我怎么能这样做?

3 个答案:

答案 0 :(得分:13)

完成此应用程序范围的最佳方法是使用ThemeResolutionService。您需要先从工具箱中拖出其中一个主题。例如,如果将Windows7Theme组件添加到表单中,则使用以下内容应用主题。

private void Form1_Load(object sender, EventArgs e)
{
    ThemeResolutionService.ApplicationThemeName = "Windows7";
}

我建议您查看与主题相关的视频: http://tv.telerik.com/watch/winforms/visualstylebuilder/changing-themes-at-run-time-with-radcontrols-winforms

答案 1 :(得分:3)

我目前正在开发Winform / Telerik应用程序。 这是一个MDI应用程序。

首先,我在项目的参考资料中添加了Telerik.Wincontrols.Themes.Breeze dll,然后在我的主要表单的构造函数中,这就是我所做的:

    private fMain()
    {
        InitializeComponent();

        ThemeResolutionService.ApplicationThemeName = "Breeze"; 
        RadGridLocalizationProvider.CurrentProvider = new FrenchRadGridLocalizationProvider();
    }

我还添加了法语RadGridLocalizationProvider。

它有效,我所有的RadDataGridViews都是法语版,并且有Breeze主题。

即使使用的Form不是Telerik,也不是我的情况,我不使用RadForm!

答案 2 :(得分:0)

为了使主题加载动态,我做了以下操作:

private void LoadTheme()
{

        var themefiles = Directory.GetFiles(System.Windows.Forms.Application.StartupPath, "Telerik.WinControls.Themes.*.dll");

        foreach (var theme in themefiles)
        {
            var themeAssembly = Assembly.LoadFile(theme);
            var themeType = themeAssembly.GetTypes().Where(t => typeof(RadThemeComponentBase).IsAssignableFrom(t)).FirstOrDefault();
            if (themeType != null)
            {
                RadThemeComponentBase themeObject = (RadThemeComponentBase)Activator.CreateInstance(themeType);
                if (themeObject != null)
                {
                    themeObject.Load();
                }
            }
        }
        var themeList = ThemeRepository.AvailableThemeNames.ToList();                
            themeDropDown.DataSource = themeList;
}

private void ThemeDropDown_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
{
            string strTheme = themeDropDown.Text;
            Theme theme = ThemeResolutionService.GetTheme(strTheme);
            if (theme != null)
            {
                    ThemeResolutionService.ApplicationThemeName = theme.Name;    
            }
}

我能够实现完全动态的主题转换体验。如果Telerik将来发布或更新主题,唯一需要的是在应用程序文件夹中添加主题dll。