Here is my UserControl consisting of a simple RadMenu and two item templates, one which displays items in red and the other in blue:
<
UserControl x:Class="SilverlightApplication32.Page2" xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:rad="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls" xmlns:radnav="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Navigation" xmlns:local="clr-namespace:SilverlightApplication32" Width="400" Height="300">
<UserControl.Resources>
<rad:HierarchicalDataTemplate x:Key="itemTemplate" ItemsSource="{Binding Items}">
<!--<TextBlock Text="{Binding Caption}" Foreground="Blue" />-->
<radnav:RadMenuItem Header="{Binding Caption}" Foreground="Blue" Icon="{Binding Image}" />
</rad:HierarchicalDataTemplate>
<rad:HierarchicalDataTemplate x:Key="itemTemplate2" ItemsSource="{Binding Items}">
<!--<TextBlock Text="{Binding Caption}" Foreground="Red" />-->
<radnav:RadMenuItem Header="{Binding Caption}" Foreground="Red" Icon="{Binding Image}" />
</rad:HierarchicalDataTemplate>
<local:TemplateSelector x:Key="DataTemplateSelector" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<radnav:RadMenu x:Name="radMenu">
<radnav:RadMenuItem x:Name="RootItem" Header="Root" ItemTemplateSelector="{StaticResource DataTemplateSelector}"/>
</radnav:RadMenu>
</Grid>
</UserControl>
Here is my data object that I am tryign to bind with and my code:
public partial class Page2 : UserControl
{
public Page2()
{
InitializeComponent();
MenuOption itemA = new MenuOption("A");
MenuOption itemB = new MenuOption("B");
MenuOption item1 = new MenuOption("1");
MenuOption item2 = new MenuOption("2");
MenuOption item3 = new MenuOption("3");
MenuOption item4 = new MenuOption("4");
MenuOption item5 = new MenuOption("5");
MenuOption item6 = new MenuOption("6");
MenuOption itemred = new MenuOption("red");
MenuOption itemblue = new MenuOption("blue");
MenuOption itemgreen = new MenuOption("green");
MenuOption itemorange = new MenuOption("orange");
MenuOption itempink = new MenuOption("pink");
itemA.Items.Add(item1);
itemA.Items.Add(item2);
itemA.Items.Add(item3);
itemB.Items.Add(item4);
itemB.Items.Add(item5);
itemB.Items.Add(
new RadSeparator());
itemB.Items.Add(item6);
item1.Items.Add(itemred);
item2.Items.Add(itemblue);
item3.Items.Add(itemgreen);
item4.Items.Add(itemorange);
item5.Items.Add(itempink);
ObservableCollection<object> source = new ObservableCollection<object>();
source.Add(itemA);
source.Add(itemB);
RootItem.ItemsSource = source;
}
}
public class TemplateSelector : DataTemplateSelector
{
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
if (object.ReferenceEquals(item, container))
return null;
return (item as MenuOption).IsSpecial ? (Application.Current.RootVisual as Page2).Resources["itemTemplate"] as HierarchicalDataTemplate : (Application.Current.RootVisual as Page2).Resources["itemTemplate2"] as HierarchicalDataTemplate;
}
}
public class MenuOption
{
public string Caption { get; set; }
public FrameworkElement Image { get; set; }
public bool IsSpecial { get; set; }
public ObservableCollection<object> Items { get; set; }
public MenuOption(string caption)
{
this.Caption = caption;
this.IsSpecial = (caption.Equals("5") || caption.Equals("A") ? true : false);
this.Image = new Rectangle() { Fill = new SolidColorBrush(Colors.Orange), Height = 16, Width = 16 };
this.Items = new ObservableCollection<object>();
}
}
My problem is simple.... if you run this project you'll see that I have RadMenuItem's inside my RadMenuItem's which isn't what I want. I would like to have a proper RadMenuItem with a Icon and Header property (not inside another item).... What am I missing here? I have been driving myself crazy over this and it's probably just something simple. Another pair of eyes is greatly appreciated.