An easier way (and a bit more generic and reusable) is to use a behavior:
public class ToolbarStyleBehavior : Behavior<RadToolBar>
{
private bool _loaded;
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.Loaded += handle_Loaded;
}
protected override void OnDetaching()
{
base.OnDetaching();
this.AssociatedObject.Loaded -= handle_Loaded;
}
private void handle_Loaded(object sender, EventArgs e)
{
if (_loaded)
return;
this.AssociatedObject.ItemContainerStyleSelector = new ToolbarStyleSelector(AssociatedObject.ItemContainerStyleSelector);
this.AssociatedObject.OnApplyTemplate();
_loaded = true;
}
}
public class ToolbarStyleSelector : StyleSelector
{
private ToolBarContainerStyleSelector _originalStyleSelector = null;
public ToolbarStyleSelector(StyleSelector originalStyleSelector)
{
this._originalStyleSelector = originalStyleSelector as ToolBarContainerStyleSelector;
}
public override Style SelectStyle(object item, DependencyObject container)
{
if (_originalStyleSelector != null)
{
// We need to exclude Telerik's internal controls that
// may also derive from Button or ToggleButton
string assembly = item.GetType().AssemblyQualifiedName;
if (!assembly.Contains("Telerik."))
{
if (typeof(ToggleButton).IsAssignableFrom(item.GetType()))
{
Style style = this.GetStyle("ToggleButton");
return style;
}
else if (typeof(Button).IsAssignableFrom(item.GetType()))
{
Style style = this.GetStyle("Button");
return style;
}
}
return _originalStyleSelector.SelectStyle(item, container);
}
return null;
}
internal Style GetStyle(string typeName)
{
if (_originalStyleSelector != null)
{
foreach (var contentItem in this._originalStyleSelector.ContainerStyles)
{
ToolBarContainerStyle containerStyle = contentItem as ToolBarContainerStyle;
if (containerStyle != null && containerStyle.TypeName == typeName)
{
return containerStyle.ContainerStyle;
}
}
}
return null;
}
}
and then in the XAML: