OK, something odd is happening with these themes. I have a mainwindow with a single tab control on it, which has 4 tab items. Whether the content of these items is a complex user control or just a RadButton, the tab and the FIRST tab item content will only take on the theme of the application 1 time only, on startup and will never retheme. All the other tab buttons do in fact retheme dynamically.
My app.xaml (based on posts elsewhere here) is as follows:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
Application
x:Class
=
"AASHTO.ElementMigration.VisualElementMigrator.App"
x:Name
=
"VisualElementMigrator"
StartupUri
=
"Views/MainWindow.xaml"
Startup
=
"Application_Startup"
xmlns:hlprs
=
"clr-namespace:AASHTO.ElementMigration.VisualElementMigrator.Helpers"
xmlns:Converters
=
"clr-namespace:AASHTO.ElementMigration.VisualElementMigrator.Converters"
xmlns:vm
=
"clr-namespace:AASHTO.ElementMigration.VisualElementMigrator.ViewModel"
xmlns:Drawing
=
"clr-namespace:System.Drawing;assembly=System.Drawing"
mc:Ignorable
=
"d"
>
<
Application.Resources
>
<
ResourceDictionary
>
<
ResourceDictionary.MergedDictionaries
>
<!-- MVVM Related -->
<
ResourceDictionary
>
<!--Global View Model Locator-->
<
vm:ViewModelLocator
x:Key
=
"Locator"
/>
</
ResourceDictionary
>
<!-- Converters-->
<
ResourceDictionary
>
<!-- used to convert some number of grid rows into a nicer page size of rows per page-->
<
Converters:DataPagerRowCountPageSizeConverter
x:Key
=
"rowCountPageSizeConverter"
/>
<!-- This TypeConverter shows the binding values in the debugger as they are bound -->
<
Converters:DatabindingDebugConverter
x:Key
=
"databindingDebugConverter"
/>
<!-- Supports binding a button to a theme / collection -->
<
Converters:TelerikThemeBindingConverter
x:Key
=
"themeBindingConverter"
/>
<!-- these two type converters are used with UI elements to enable/disable and show / hide/ collapse-->
<
Converters:IntToBoolConverter
x:Key
=
"IntToBoolConverter"
/>
<
Converters:BoolToVisibilityConverter
x:Key
=
"boolToVisibilityConverter"
/>
</
ResourceDictionary
>
<!-- Styles -->
<
ResourceDictionary
Source
=
"pack://application:,,,/VisualElementMigrator;component/LookAndFeel/Styles/MainStyles.xaml"
/>
<!-- Application Theme -->
<
ResourceDictionary
>
<
telerik:Theme
x:Key
=
"TelerikGlobalTheme"
>Office_Blue</
telerik:Theme
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"Grid"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"GridSplitter"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Must specify for all control types to force a dynamic theme update -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Button}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type CheckBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ComboBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Expander}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type GroupBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Label}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ListBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ListView}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Menu}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type PasswordBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ProgressBar}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type RadioButton}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type RichTextBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ScrollBar}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ScrollViewer}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Slider}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type Separator}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type StatusBar}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type TabControl}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type TabItem}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type TextBox}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type TextBlock}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ToolBar}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ToolBarPanel}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type ToolBarTray}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"{x:Type TreeView}"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- This allows for dynamic changing of themes -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadButtonGroup"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Docking -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadDocking"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadSplitContainer"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Navigation -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadDataPager"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadPane"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadDocumentPane"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadPaneGroup"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadContextMenu"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadMenu"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadMenuItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:Separator"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTileView"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTileViewItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTabControl"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTabItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadOutlookBar"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadOutlookBarItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadPanelBar"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadPanelBarItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadToolBar"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadToolBarSeparator"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadToolBarTray"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTreeView"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTreeViewItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:CarouselItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadCarousel"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadCarouselPanel"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadWindow"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!--Gauge type is now obsolete - replaced in Q3 2011 by multiple distinct guage types
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadGuage"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
-->
<!-- Grid -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadGridView"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Scheduler is obsolete - replaced with RadScheduleView
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadScheduler"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
-->
<!-- Controls -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadButton"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadDropDownButton"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadRadioButton"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadSplitButton"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadToggleButton"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadExpander"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadWrapPanel"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadProgressBar"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadSlider"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Input -->
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadCalendar"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadColorPaletteView"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadColorPaletteViewItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadColorPicker"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadColorSelector"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadComboBox"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadComboBoxItem"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadDatePicker"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadMaskedTextBox"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadNumericUpDown"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadClock"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:RadTimePicker"
>
<
Setter
Property
=
"telerik:StyleManager.Theme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
<!-- Doesnt work.
<
Style
BasedOn
=
"{x:Null}"
TargetType
=
"telerik:StyleManager"
>
<
Setter
Property
=
"ApplicationTheme"
Value
=
"{DynamicResource TelerikGlobalTheme}"
/>
</
Style
>
-->
</
ResourceDictionary
>
</
ResourceDictionary.MergedDictionaries
>
</
ResourceDictionary
>
</
Application.Resources
>
</
Application
>
The theme part of this is supposed to dynamically retheme standard windows controls as well as Rad Controls. Yes, it does, sort of.
So I have a method to apply the theme based on a selection of a them /// <summary>
/// <summary>
/// Set the theme to the passed theme name string
/// </summary>
/// <param name = "themeInternalName"></param>
/// <param name="forceThemeChange"> Makes the theme change happen regardless</param>
public
void
SetTheme(
string
themeInternalName,
bool
forceThemeChange =
false
)
{
//* Currently Telerik RadControls support the following themes out of the box:
//* Office_Black
//* Office_Blue
//* Office_Silver
//* Summer
//* Vista
//* Windows 7
//* Transparent
//* Expression_Dark
//* Metro
var themeNameTest = themeInternalName ??
(Settings.Default.ActiveTheme ??
"Office_Blue"
);
try
{
if
(themeNameTest != Application.Current.FindResource(
"TelerikGlobalTheme"
).ToString() || forceThemeChange)
{
// Verify themeInternalName is in the set of valid themeNames..
// this cannot happen unless the string is not a valid Telerik theme internal name
if
(!ThemeManager.StandardThemeNames.Contains(themeNameTest))
throw
new
ArgumentException(
string
.Format(
"Theme name switch failed - theme {0} does not exist in the standard themes"
, themeNameTest),
"themeNameTest"
);
// set the visual theme we are using
Theme newTheme = ThemeManager.FromName(themeNameTest);
Application.Current.Resources[
"TelerikGlobalTheme"
] = newTheme;
StyleManager.ApplicationTheme = newTheme;
// (Telerik.Windows.Controls.Theme)Application.Current.FindResource("TelerikGlobalTheme");
Settings.Default.ActiveTheme = themeNameTest;
// Themes.GetFamiliarThemeName(StyleManager.ApplicationTheme.ToString());
Settings.Default.Save();
}
}
catch
(ArgumentException argEx)
{
var msg =
string
.Format(
"Target Theme Name {0} is invalid! Setting to default theme {1} . Exception was {2}"
,
themeNameTest, ThemeManager.StandardThemeNames[0], argEx);
Logger.Debug(msg);
//figure out the visual theme we are using by taking the first one
StyleManager.ApplicationTheme =
ThemeManager.FromName(ThemeManager.StandardThemeNames[0]);
}
catch
(Exception ex)
{
Logger.ErrorFormat(
"An unexpected exception has occurred."
+ Environment.NewLine +
"StyleManager.ApplicationTheme could not be set! Setting to default theme {1} . Exception was {2}"
,
ThemeManager.StandardThemeNames[0], ex);
//figure out the visual theme we are using by taking the first one which is (likely) Office_Blue
StyleManager.ApplicationTheme =
ThemeManager.FromName(ThemeManager.StandardThemeNames[0]);
Telerik.Windows.Controls.Theme newTheme = Telerik.Windows.Controls.ThemeManager.FromName(ThemeManager.StandardThemeNames[0]);
Application.Current.Resources[
"TelerikGlobalTheme"
] = newTheme;
}
}
The theme INTERNAL NAME is stored in properties so it can be reapplied next time. Default is OFFICE_BLUE.
THe theme name e.g. Office_Black is squirted into the resource TelerikGlobalTheme and becomes the StyleManager.ApplicationTheme.
Every control and the window as a whole react to this EXCEPT the overall TabControl and the content of the FIRST TabItem. The other tabs' content which are also buttons happily retheme. I have tried this both with direct entry of the tab items and by creating them on the fly from a collection using the TabControl ItemsSource. Makes no difference.
Even worse, it appears that the TabControl and the content of its first tabitem are somehow not in the same visual tree as the rest of the app, because I am getting a message like ;
(some) control is already the child of another control - please disconnect it first - which I cannot figure out to save my life.
The MainWindow stuff of intereest looks like:
<
telerik:RadTabControl
telerik:StyleManager.Theme
=
"{StaticResource TelerikGlobalTheme}"
>
<
telerik:RadTabItem
x:Name
=
"RulesEditorElementTabItem4"
B4_AppLibrary:Custom.ContextHelpId
=
"RulesManagerTabToolTipId"
>
<
telerik:RadTabItem.Header
>
<
Grid
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Icons/script.png"
Height
=
"16"
Width
=
"16"
/>
<
TextBlock
Text
=
"Edit Migrator Rules"
Margin
=
"3,0,0,0"
/>
</
StackPanel
>
</
Grid
>
</
telerik:RadTabItem.Header
>
<
telerik:RadButton
x:Name
=
"radButtonExit4"
Margin
=
"20,0,0,0"
xaml4word:Custom.ContextHelpId
=
"ExitApplicationToolTipId"
Command
=
"{Binding ShutdownCommand}"
Height
=
"40"
Width
=
"80"
VerticalAlignment
=
"Center"
VerticalContentAlignment
=
"Center"
HorizontalAlignment
=
"Center"
HorizontalContentAlignment
=
"Center"
>
<
telerik:RadButton.ContentTemplate
>
<
DataTemplate
>
<
DockPanel
>
<
TextBlock
DockPanel.Dock
=
"Left"
TextAlignment
=
"Center"
FontWeight
=
"Bold"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
Text
=
"Exit"
/>
<
Separator
Width
=
"4"
Visibility
=
"Hidden"
/>
<
Image
DockPanel.Dock
=
"Right"
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Menu/Dialog-Close.png"
/>
</
DockPanel
>
</
DataTemplate
>
</
telerik:RadButton.ContentTemplate
>
</
telerik:RadButton
>
<!--<
Controls:RulesManager
x:Name
=
"RulesManagerControl"
B4_AppLibrary:Custom.ContextHelpId
=
"RulesManagerControlToolTipId"
/>-->
</
telerik:RadTabItem
>
<
telerik:RadTabItem
x:Name
=
"RulesEditorElementTabItem"
B4_AppLibrary:Custom.ContextHelpId
=
"RulesManagerTabToolTipId"
>
<
telerik:RadTabItem.Header
>
<
Grid
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Icons/script.png"
Height
=
"16"
Width
=
"16"
/>
<
TextBlock
Text
=
"Edit Migrator Rules"
Margin
=
"3,0,0,0"
/>
</
StackPanel
>
</
Grid
>
</
telerik:RadTabItem.Header
>
<
telerik:RadButton
x:Name
=
"radButtonExit1"
Margin
=
"20,0,0,0"
xaml4word:Custom.ContextHelpId
=
"ExitApplicationToolTipId"
Command
=
"{Binding ShutdownCommand}"
Height
=
"40"
Width
=
"80"
VerticalAlignment
=
"Center"
VerticalContentAlignment
=
"Center"
HorizontalAlignment
=
"Center"
HorizontalContentAlignment
=
"Center"
>
<
telerik:RadButton.ContentTemplate
>
<
DataTemplate
>
<
DockPanel
>
<
TextBlock
DockPanel.Dock
=
"Left"
TextAlignment
=
"Center"
FontWeight
=
"Bold"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
Text
=
"Exit"
/>
<
Separator
Width
=
"4"
Visibility
=
"Hidden"
/>
<
Image
DockPanel.Dock
=
"Right"
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Menu/Dialog-Close.png"
/>
</
DockPanel
>
</
DataTemplate
>
</
telerik:RadButton.ContentTemplate
>
</
telerik:RadButton
>
<!--<
Controls:RulesManager
x:Name
=
"RulesManagerControl"
B4_AppLibrary:Custom.ContextHelpId
=
"RulesManagerControlToolTipId"
/>-->
</
telerik:RadTabItem
>
<
telerik:RadTabItem
x:Name
=
"CoReElementTabItem"
B4_AppLibrary:Custom.ContextHelpId
=
"SourceCoreElementDataTabToolTipId"
>
<
telerik:RadTabItem.Header
>
<
Grid
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Icons/Download.png"
Height
=
"16"
Width
=
"16"
/>
<
TextBlock
Text
=
"CoRe Elements"
Margin
=
"3,0,0,0"
/>
</
StackPanel
>
</
Grid
>
</
telerik:RadTabItem.Header
>
<
telerik:RadButton
x:Name
=
"radButtonExit2"
Margin
=
"20,0,0,0"
xaml4word:Custom.ContextHelpId
=
"ExitApplicationToolTipId"
Command
=
"{Binding ShutdownCommand}"
Height
=
"40"
Width
=
"80"
VerticalAlignment
=
"Center"
VerticalContentAlignment
=
"Center"
HorizontalAlignment
=
"Center"
HorizontalContentAlignment
=
"Center"
>
<
telerik:RadButton.ContentTemplate
>
<
DataTemplate
>
<
DockPanel
>
<
TextBlock
DockPanel.Dock
=
"Left"
TextAlignment
=
"Center"
FontWeight
=
"Bold"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
Text
=
"Exit"
/>
<
Separator
Width
=
"4"
Visibility
=
"Hidden"
/>
<
Image
DockPanel.Dock
=
"Right"
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Menu/Dialog-Close.png"
/>
</
DockPanel
>
</
DataTemplate
>
</
telerik:RadButton.ContentTemplate
>
</
telerik:RadButton
>
<!--<
Controls:CoReElementDataManager
x:Name
=
"CoReElementDataManagerControl"
B4_AppLibrary:Custom.ContextHelpId
=
"CoReElementDataManagerControlToolTipId"
/>-->
</
telerik:RadTabItem
>
<
telerik:RadTabItem
x:Name
=
"AASHTOElementTabItem"
B4_AppLibrary:Custom.ContextHelpId
=
"MigratedNbeBmeAdeDataTabToolTipId"
>
<
telerik:RadTabItem.Header
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Icons/database_go.png"
Height
=
"16"
Width
=
"16"
/>
<
TextBlock
Text
=
"AASHTO Elements - NBE/BME/ADE"
Margin
=
"3,0,0,0"
/>
</
StackPanel
>
</
telerik:RadTabItem.Header
>
<
telerik:RadButton
x:Name
=
"radButtonExit3"
Margin
=
"20,0,0,0"
xaml4word:Custom.ContextHelpId
=
"ExitApplicationToolTipId"
Command
=
"{Binding ShutdownCommand}"
Height
=
"40"
Width
=
"80"
VerticalAlignment
=
"Center"
VerticalContentAlignment
=
"Center"
HorizontalAlignment
=
"Center"
HorizontalContentAlignment
=
"Center"
>
<
telerik:RadButton.ContentTemplate
>
<
DataTemplate
>
<
DockPanel
>
<
TextBlock
DockPanel.Dock
=
"Left"
TextAlignment
=
"Center"
FontWeight
=
"Bold"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
Text
=
"Exit"
/>
<
Separator
Width
=
"4"
Visibility
=
"Hidden"
/>
<
Image
DockPanel.Dock
=
"Right"
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Menu/Dialog-Close.png"
/>
</
DockPanel
>
</
DataTemplate
>
</
telerik:RadButton.ContentTemplate
>
</
telerik:RadButton
>
<!--<
Controls:AASHTOElementDataManager
x:Name
=
"AASHTOElementDataManagerControl"
B4_AppLibrary:Custom.ContextHelpId
=
"AASHTOElementDataManagerControlToolTipId"
/>-->
</
telerik:RadTabItem
>
<
telerik:RadTabItem
x:Name
=
"SetupTabItem"
B4_AppLibrary:Custom.ContextHelpId
=
"SetupTabToolTipId"
>
<
telerik:RadTabItem.Header
>
<
Grid
>
<
StackPanel
Orientation
=
"Horizontal"
>
<
Image
Source
=
"pack://application:,,,/ResourceLibrary;component/Resources/Images/Icons/Config.png"
Height
=
"16"
Width
=
"16"
/>
<
TextBlock
Text
=
"Settings"
Margin
=
"3,0,0,0"
/>
</
StackPanel
>
</
Grid
>
</
telerik:RadTabItem.Header
>
<
Controls:UseCaseSettingsManager
x:Name
=
"UseCaseSettingsView"
B4_AppLibrary:Custom.ContextHelpId
=
"UseCaseSettingsManagerToolTipId"
/>
</
telerik:RadTabItem
>
</
telerik:RadTabControl
>
There are 4 tab items. Content of Tabs 2-4 all retheme as expected There is a buttongroup on this page that rethemes, and another usercontrol that rethemes - only the tabcontrol and the content of its first tab do not react.
It is like the tab does not listen to the stylemanager. How can that be?
HELP!