New to Telerik UI for WPF? Download free 30-day trial

Custom Content

ContentTemplate and CompactContentTemplate

Each RadOfficeNavigationBarItem supports setting complex structures of elements to its ContentTemplate and CompactContentTemplate properties. These structures will represent the values set to its Content and CompactContent properties.

The CompactContent, CompactContentTemplate, and CompactContentTemplateSelector properties will be used when the IsInCompactMode property is set to True. To learn more about this items display mode, check the View Modes article.

Example complex ContentTemplate

<telerik:RadOfficeNavigationBarItem Content="Mail"> 
    <telerik:RadOfficeNavigationBarItem.ContentTemplate> 
        <DataTemplate> 
            <StackPanel Orientation="Horizontal"> 
                <Border Width="12" Height="12" Background="Red"/> 
                <TextBlock Text="{Binding}" Foreground="Red" Margin="5 0 0 0"/> 
            </StackPanel> 
        </DataTemplate> 
    </telerik:RadOfficeNavigationBarItem.ContentTemplate> 
</telerik:RadOfficeNavigationBarItem> 
RadOfficeNavigationBarItem with a custom ContentTemplate

WPF RadOfficeNavigationBarItem with a custom ContentTemplate

Example complex CompactContentTemplate

<telerik:RadOfficeNavigationBar IsInCompactMode="True"> 
    <telerik:RadOfficeNavigationBarItem CompactContent="&#xe809;"> 
        <telerik:RadOfficeNavigationBarItem.CompactContentTemplate> 
            <DataTemplate> 
                <telerik:RadGlyph Glyph="{Binding}" Foreground="Red"/> 
            </DataTemplate> 
        </telerik:RadOfficeNavigationBarItem.CompactContentTemplate> 
    </telerik:RadOfficeNavigationBarItem> 
</telerik:RadOfficeNavigationBar> 
RadOfficeNavigationBarItem with a custom CompactContentTemplate

WPF RadOfficeNavigationBarItem with a custom CompactContentTemplate

ContentTemplateSelector and CompactContentTemplateSelector

The ContentTemplateSelector and CompactContentTemplateSelector allow you to apply different data templates based on custom logic.

For the purpose of the following example, the ContentTemplateSelector property of the RadOfficeNavigationBarItem will be used.

The example utilizes the RadGlyph element. To learn more about it, check the RadGlyph article.

Define a sample model class that will hold the name and the glyph as string of each item.

Define a model

public class ItemModel 
{ 
    public string Name { get; set; } 
    public string GlyphString { get; set; } 
} 

After that, create a view model that will contain a collection of ItemModels instances. This collection will be bound to the ItemsSource property of the RadOfficeNavigationBar control.

Define a view model

public class ItemsViewModel 
{ 
    public ItemsViewModel() 
    { 
        this.ItemModels = new ObservableCollection<ItemModel> 
        { 
            new ItemModel() { Name = "Mail", GlyphString = "xe809" }, 
            new ItemModel() { Name = "Calendar", GlyphString = "No glyph" }, 
        }; 
    } 
 
    public ObservableCollection<ItemModel> ItemModels { get; set; } 
} 

Next, we can define a custom DataTemplateSelector class and override its SelectTemplate method. In it, we will check if the GlyphString property equals "No glyph" and return different DataTemplate depending on this check.

Define a custom DataTemplateSelector

public class GlyphContentTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate GlyphDataTemplate { get; set; } 
    public DataTemplate DefaultDataTemplate { get; set; } 
 
    public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
        ItemModel itemModel = (ItemModel)item; 
 
        if (itemModel.GlyphString == "No glyph") 
        { 
            return this.DefaultDataTemplate; 
        } 
 
        return this.GlyphDataTemplate; 
    } 
} 

Create an instance of the custom DataTemplateSelector class in XAML and set it to each RadOfficeNavigationBarItem element.

Instantiate the custom DataTemplateSelector in XAML

<Application.Resources> 
    <telerik:StringToGlyphConverter x:Key="StringToGlyphConverter"/> 
 
    <local:GlyphContentTemplateSelector x:Key="GlyphContentTemplateSelector"> 
        <local:GlyphContentTemplateSelector.DefaultDataTemplate> 
            <DataTemplate> 
                <StackPanel Orientation="Horizontal"> 
                    <telerik:RadGlyph Glyph="{StaticResource GlyphCalendar}" Margin="0 0 3 0"/> 
                    <TextBlock Text="{Binding Name}"/> 
                </StackPanel> 
            </DataTemplate> 
        </local:GlyphContentTemplateSelector.DefaultDataTemplate> 
        <local:GlyphContentTemplateSelector.GlyphDataTemplate> 
            <DataTemplate> 
                <StackPanel Orientation="Horizontal"> 
                    <telerik:RadGlyph Glyph="{Binding GlyphString, Converter={StaticResource StringToGlyphConverter}}" Margin="0 0 3 0"/> 
                    <TextBlock Text="{Binding Name}"/> 
                </StackPanel> 
            </DataTemplate> 
        </local:GlyphContentTemplateSelector.GlyphDataTemplate> 
    </local:GlyphContentTemplateSelector> 
 
    <Style x:Key="OfficeNavigationBarItemStyle" TargetType="telerik:RadOfficeNavigationBarItem" BasedOn="{StaticResource RadOfficeNavigationBarItemStyle}"> 
        <Setter Property="ContentTemplateSelector" Value="{StaticResource GlyphContentTemplateSelector}"/> 
    </Style> 
</Application.Resources> 
Finally, apply the new Style to the ItemContainerStyle property of the RadOfficeNavigationBar control.

Set the custom Style to the ItemContainerStyle property

<Grid> 
    <Grid.DataContext> 
        <local:ItemsViewModel/> 
    </Grid.DataContext> 
    <telerik:RadOfficeNavigationBar ItemsSource="{Binding ItemModels}" ItemContainerStyle="{StaticResource OfficeNavigationBarItemStyle}"/> 
</Grid> 
RadOfficeNavigationBarItems with custom ContentTemplateSelector

WPF RadOfficeNavigationBarItems with custom ContentTemplateSelector