This question is locked. New answers and comments are not allowed.
Hi,
I’m trying to create Custom RadMenuItem. So that i can override mouseleave event to have my own visual state properties. But i'm not sure how to bind CustomRadMenuItem to my Custom RadMenu.cs. I've copied both xaml file and .cs files below FYR
I’m getting exception at PrepareContainerForItemOverride method in my Custom RadMenu.CS file,
1. base.PrepareContainerForItemOverride (element,item) is throwing exception.
2. unable to cast Telerik.Windows.Controls.RadMenuItem to CustomRadMenuItem.
Can you please help me on this?
Regards,
Mahesh.
XAML File: <ControlTemplate x:Key="NavBarTopLevelHeaderTemplate" TargetType="local:CustomRadMenuItem"> <Grid > <Rectangle x:Name="BackgroundVisual" Fill="#FFe8f2ff" Opacity="0" /> <TextBlock x:Name="TextElement" Text="{Binding Title}" TextDecorations="None" Foreground="White" FontFamily="Arial" Margin="10,6,20,6" HorizontalAlignment="Right" VerticalAlignment="Stretch" FontSize="12" /> <Path x:Name="DropDownArrow" Fill="White" Data="M0,0 L2,0 1,1" Stretch="Uniform" Width="7" Height="5" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="4,0,10,0" /> <Popup x:Name="PART_Popup" HorizontalOffset="-1" VerticalOffset="-1" MaxHeight="250"> <Border x:Name="PopupContent" Margin="0 1 0 0" BorderBrush="{StaticResource MenuDropDownBorder}" BorderThickness="1,0,1,1" Background="{StaticResource MenuDropDownBackground}" Padding="6" CornerRadius="0,4,4,4"> <Border BorderThickness="1"> <ItemsPresenter Margin="8 4" /> </Border> </Border> </Popup> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:0.2"/> </VisualStateGroup.Transitions> <VisualState x:Name="Unfocused" /> <VisualState x:Name="Normal" /> <VisualState x:Name="Focused"> <!--<Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="BackgroundVisual" Storyboard.TargetProperty="Opacity"> <LinearDoubleKeyFrame KeyTime="00:00:00.1" Value="1" /> </DoubleAnimationUsingKeyFrames> <ColorAnimation Duration="0" To="#FF1061a1" Storyboard.TargetName="TextElement" Storyboard.TargetProperty="(TextBlock.ForeGround).(SolidColorBrush.Color)" /> <ColorAnimation Duration="0" To="#FF1061a1" Storyboard.TargetName="DropDownArrow" Storyboard.TargetProperty="(Path.Fill).(SolidColorBrush.Color)" /> </Storyboard>--> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Grid> </ControlTemplate> <ControlTemplate x:Key="NavBarTopLevelItemTemplate" TargetType="local:CustomRadMenuItem"> <Grid > <Rectangle x:Name="BackgroundVisual" Fill="#FFe8f2ff" Opacity="0" /> <TextBlock x:Name="TextElement" Text="{Binding Title}" TextDecorations="None" Foreground="White" FontFamily="Arial" Margin="10,6" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="12" /> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CheckStates"> <VisualState x:Name="Checked"> <Storyboard > <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="BackgroundVisual" Storyboard.TargetProperty="Opacity"> <LinearDoubleKeyFrame KeyTime="00:00:00.1" Value="1" /> </DoubleAnimationUsingKeyFrames> <ColorAnimation Duration="0" To="#FF1061a1" Storyboard.TargetName="TextElement" Storyboard.TargetProperty="(TextBlock.ForeGround).(SolidColorBrush.Color)" /> </Storyboard> </Storyboard> </VisualState> <VisualState x:Name="Unchecked"/> <VisualState x:Name="HideIcon"/> </VisualStateGroup> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Disabled"/> <VisualState x:Name="Highlighted"> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="BackgroundVisual" Storyboard.TargetProperty="Opacity"> <LinearDoubleKeyFrame KeyTime="00:00:00.1" Value="1" /> </DoubleAnimationUsingKeyFrames> <ColorAnimation Duration="0" To="#FF1061a1" Storyboard.TargetName="TextElement" Storyboard.TargetProperty="(TextBlock.ForeGround).(SolidColorBrush.Color)" /> </Storyboard> </VisualState> <VisualState x:Name="Normal"/> </VisualStateGroup> <VisualStateGroup x:Name="FocusStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration="0:0:0.2"/> </VisualStateGroup.Transitions> <VisualState x:Name="Unfocused" /> <VisualState x:Name="Focused"> </VisualState> <VisualState x:Name="MouseOver"> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Grid> </ControlTemplate> <Style x:Key="NavigationStyle" TargetType="local:CustomRadMenuItem"> <Setter Property="Template" Value="{StaticResource NavBarTopLevelHeaderTemplate}"/> <Setter Property="SeparatorTemplateKey" Value="{StaticResource NavBarTopLevelHeaderTemplate}"/> <Setter Property="SubmenuItemTemplateKey" Value="{StaticResource NavBarTopLevelHeaderTemplate}"/> <Setter Property="TopLevelHeaderTemplateKey" Value="{StaticResource NavBarTopLevelHeaderTemplate}"/> <Setter Property="TopLevelItemTemplateKey" Value="{StaticResource NavBarTopLevelItemTemplate}"/> <Setter Property="SubmenuHeaderTemplateKey" Value="{StaticResource NavBarTopLevelHeaderTemplate}"/> <Setter Property="IsCheckable" Value="True"/> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <toolkit:WrapPanel Orientation="Vertical"/> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="telerik:AnimationManager.AnimationSelector"> <Setter.Value> <telerik:AnimationSelector> <telerik:SlideAnimation Direction="In" SlideMode="Top" AnimationName="Expand" TargetElementName="PopupContent" /> </telerik:AnimationSelector> </Setter.Value> </Setter> </Style> <local:NavigationMenuStyleSelector x:Key="navigationPanelStyleSelector" FirstLevelWithViewStyle="{StaticResource NavigationStyle}" FirstLevelWithChildrenStyle="{StaticResource NavigationStyle}" FirstLevelWithBothStyle="{StaticResource NavigationStyle}" SecondLevelWithViewStyle="{StaticResource MenuItem2WithViewsStyle}" SecondLevelWithChildrenStyle="{StaticResource MenuItem2WithChildrenStyle}" SecondLevelWithBothStyle="{StaticResource MenuItem2WithBothStyle}" AdditionalLevelWithViewStyle="{StaticResource MenuItem2WithViewsStyle}" AdditionalLevelWithChildrenStyle="{StaticResource MenuItem2WithChildrenStyle}" AdditionalLevelWithBothStyle="{StaticResource MenuItem2WithBothStyle}" /> <Style TargetType="local:NavigationBar"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:NavigationBar"> <Border d:DataContext="{Binding SelectedModule, Source={StaticResource SampleApplicationViewModel}}" DataContext="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}" Opacity="0.7" BorderThickness="0" Background="#FF105E9E" d:DesignHeight="30" d:DesignWidth="800" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <local:RadMenu Margin="20,0,20,0" ItemsSource="{Binding NavigationTree}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemContainerStyleSelector="{StaticResource navigationPanelStyleSelector}" Background="{x:Null}" VerticalContentAlignment="Stretch"> <local:RadMenu.ItemTemplate> <telerik:HierarchicalDataTemplate ItemsSource="{Binding Children}"> <telerik:ContainerBinding.ContainerBindings> <telerik:ContainerBindingCollection> <telerik:ContainerBinding PropertyName="Icon" Binding="{Binding SmallIcon}" /> <telerik:ContainerBinding PropertyName="Command" Binding="{Binding OpenView}" /> <telerik:ContainerBinding PropertyName="Header" Binding="{Binding Title}" /> </telerik:ContainerBindingCollection> </telerik:ContainerBinding.ContainerBindings> <TextBlock Text="{Binding Title}" /> </telerik:HierarchicalDataTemplate> </local:RadMenu.ItemTemplate> </local:RadMenu> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>public class RadMenu : Telerik.Windows.Controls.RadMenu { /// <summary> /// Set the default style. /// </summary> public RadMenu() { this.DefaultStyleKey = typeof(RadMenu); }protected override void PrepareContainerForItemOverride(DependencyObject element, object item) { base.PrepareContainerForItemOverride(element, item); DrillDownViewModel viewModel = (DrillDownViewModel)item; CustomRadMenuItem menuItem = (CustomRadMenuItem)element; IViewsViewModel viewsViewModel = ServiceLocator.Current.Resolve<IViewsViewModel>(); IViewViewModel detailView = viewsViewModel.ActiveViews.FirstOrDefault<IViewViewModel>(vm => vm.DockPosition == DockPosition.MainView); if (detailView != null && detailView.Title == viewModel.Title ) { menuItem.IsChecked = true; } }}public class CustomRadMenuItem : Telerik.Windows.Controls.RadMenuItem { /// <summary> /// Set the default style. /// </summary> public CustomRadMenuItem () { this.DefaultStyleKey = typeof(RadMenuItem); }