Как переключать темы в Telerik WinForms? - PullRequest
10 голосов
/ 09 декабря 2010

Как мне сообщить Telerik for WinForms, какую из его тем использовать?

Я создал новый проект WinForms и отбросил RadPageView на форме, но на всем пути есть мертвое пространство в 5 пикселейвокруг, вкладки почти в два раза выше, чем они должны быть, и все блестит и синий.Даже если не считать потраченного впустую пространства, все эти синие вещи будут выглядеть ужасно неуместно в нашем приложении.Мне просто нужен стандартный внешний вид Windows, и я предполагаю, что способ сделать это - выбрать другую, менее синюю, менее блестящую тему.(Или есть другой способ?)

Вот что я пробовал:

  • Я попытался установить EnableTheming в False, но тогда у вкладок вообще нет границ, так что абсолютнонет указания, где щелкнуть или какая вкладка активна - не годится.
  • Я могу раскрыть свойство ThemeName в таблице свойств, но единственными параметрами являются «Сброс» и «ControlDefault».Ни одна из настроек ничего не делает (даже если для EnableTheming установлено значение True).
  • В панели инструментов есть несколько классов Theme (AquaTheme, BreezeTheme и т. Д.), Но их добавление в форму не приводит к каким-либо изменениям.разница.Я думал, что они могут появиться в раскрывающемся списке ThemeName, но это не так.
  • Я попытался добавить RadThemeManager в мою форму, но у него есть только коллекция LoadedThemes, которая пуста.Я могу добавить что-то к нему, но это просто добавляет ThemeSource, и настройка одного из них, по-видимому, включает в себя просмотр файла, и у меня нет файлов тем для просмотра.
  • Есть ThemeClassNameсвойство в RadPageView, но это просто строка (по умолчанию Telerik.WinControls.UI.RadPageView), и я понятия не имею, на что я могу ее изменить или как она относится к темам.

Это нелепо.Все, что я хочу, это элемент управления вкладками, который выглядит как элемент управления вкладками!Как я могу это сделать?

Ответы [ 3 ]

13 голосов
/ 10 декабря 2010

Лучший способ добиться этого в масштабах всего приложения - использовать 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

3 голосов
/ 13 декабря 2010

В настоящее время я работаю над приложением Winform / Telerik. Это приложение MDI.

Сначала я добавил в Ссылки моего проекта Telerik.Wincontrols.Themes.Breeze dll, затем в конструкторе моей основной формы вот что я сделал:

    private fMain()
    {
        InitializeComponent();

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

Я также добавил французский RadGridLocalizationProvider.

И это работает, все мои RadDataGridViews на французском языке и имеют тему Breeze.

Даже если используемая форма не Telerik, как в моем случае, я не использую RadForm!

0 голосов
/ 06 сентября 2016

Чтобы сделать загрузку тем динамичной, я сделал следующее:

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 выпустит или обновит темы в будущем, единственное, что требуется, это добавить библиотеки тем в папку приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...