Как переключать темы в Telerik WinForms?
Как сообщить Telerik для WinForms, какие из его тем использовать?
Я создал новый проект WinForms и сбросил RadPageView в форме, но там есть 5-пиксельный край мертвого пространства на всем пути, вкладки почти в два раза выше, чем они должны быть, и все блестяще и синий. Даже несмотря на потраченное впустую пространство, весь этот синий материал выглядел бы ужасно неуместным в нашем приложении. Мне просто нужен стандартный вид Windows, и я предполагаю, что для этого нужно выбрать другую, менее голубую, менее блестящую тему. (Или есть другой способ?)
Вот что я пробовал:
- Я попробовал установить EnableTheming в False, но тогда у вкладок нет границ, поэтому нет никаких указаний на то, где щелкнуть или какая вкладка активна - вообще ничего хорошего.
- Я могу скрыть свойство ThemeName в Property Grid, но единственными параметрами являются "Reset" и "ControlDefault". Ни одна настройка не делает ничего (даже если EnableTheming установлен на True).
- В панели инструментов есть куча классов тем (AquaTheme, BreezeTheme и т.д.), но добавление их в мою форму не имеет никакого значения. Я думал, они могут появиться в выпадающем списке ThemeName, но они этого не делают.
- Я попытался сбросить RadThemeManager в моей форме, но у него есть только коллекция LoadedThemes, которая пуста. Я могу добавить к нему что-то, но это просто добавляет ThemeSource, и установка одного из них, кажется, связана с просмотром файла, и у меня нет файлов тем для просмотра.
- В RadPageView есть свойство ThemeClassName, но это просто строка (по умолчанию используется Telerik.WinControls.UI.RadPageView), и я понятия не имею, что я могу изменить или как она относится к темам.
Это смешно. Все, что я хочу - это элемент управления вкладкой, который выглядит как элемент управления вкладкой! Как я могу это сделать?
Ответы
Ответ 1
Лучшим способом выполнения этой прикладной программы будет использование службы 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
Ответ 2
В настоящее время я работаю над приложением Winform/Telerik.
Это приложение MDI.
Во-первых, я добавил в "Референции моего проекта" документацию Telerik.Wincontrols.Themes.Breeze, а затем в конструкторе моей основной формы вот что я сделал:
private fMain()
{
InitializeComponent();
ThemeResolutionService.ApplicationThemeName = "Breeze";
RadGridLocalizationProvider.CurrentProvider = new FrenchRadGridLocalizationProvider();
}
Я также добавил французский RadGridLocalizationProvider.
И это работает, все мои RadDataGridViews на французском языке и имеют тему Breeze.
Даже если используемая форма не является Telerik, это мой случай, я не использую RadForm!
Ответ 3
Чтобы сделать динамическую загрузку тем, я сделал следующее:
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 темы в папку приложения.