This question is locked. New answers and comments are not allowed.
Hi!
I'm using RadTabControl and RadTreeView to create my project.
I want to click the tree node to add a tab item in RadTabControl.
When I click the tree node to add a tab item (once or twice) or select other tabs, TargetInvocationException will happen.
Here is the information:
{System.Reflection.TargetInvocationException: Exception thrown by the target of an invocation. ---> System.ArgumentException: Invalid parameter used.
MS.Internal.XcpImports.CheckHResult(UInt32 hr)
MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)
MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
System.Windows.Data.BindingExpression.SendDataToTarget()
System.Windows.Data.BindingExpression.SourceAcquired()
System.Windows.Data.Debugging.BindingBreakPoint.<>c__DisplayClass1.<BreakOnSingleType>b__0()
System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Delegate.DynamicInvokeImpl(Object[] args)
System.Delegate.DynamicInvoke(Object[] args)
MainPagexaml_3.BindingOperation_84_36(Object BindingState, Action )}
Here is my code:
"MainPage.xaml"
"MainPage.xaml.cs"
"MainViewModel.cs"
"TabViewModel.cs"
"SilverlightControl1.xaml"
"SilverlightControl1.xaml.cs"
Thank you for the support.
I'm using RadTabControl and RadTreeView to create my project.
I want to click the tree node to add a tab item in RadTabControl.
When I click the tree node to add a tab item (once or twice) or select other tabs, TargetInvocationException will happen.
Here is the information:
{System.Reflection.TargetInvocationException: Exception thrown by the target of an invocation. ---> System.ArgumentException: Invalid parameter used.
MS.Internal.XcpImports.CheckHResult(UInt32 hr)
MS.Internal.XcpImports.SetValue(IManagedPeerBase obj, DependencyProperty property, DependencyObject doh)
MS.Internal.XcpImports.SetValue(IManagedPeerBase doh, DependencyProperty property, Object obj)
System.Windows.DependencyObject.SetObjectValueToCore(DependencyProperty dp, Object value)
System.Windows.DependencyObject.SetEffectiveValue(DependencyProperty property, EffectiveValueEntry& newEntry, Object newValue)
System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty property, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, ValueOperation operation)
System.Windows.DependencyObject.RefreshExpression(DependencyProperty dp)
System.Windows.Data.BindingExpression.SendDataToTarget()
System.Windows.Data.BindingExpression.SourceAcquired()
System.Windows.Data.Debugging.BindingBreakPoint.<>c__DisplayClass1.<BreakOnSingleType>b__0()
System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Delegate.DynamicInvokeImpl(Object[] args)
System.Delegate.DynamicInvoke(Object[] args)
MainPagexaml_3.BindingOperation_84_36(Object BindingState, Action )}
Here is my code:
"MainPage.xaml"
<UserControl x:Class="sl_639387_AddTabItem.MainPage" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <UserControl.Resources> <Style x:Key="CloseButton" TargetType="Button"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="Button"> <Grid Background="Transparent" Width="14" Height="14"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal" /> <VisualState x:Name="MouseOver"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="FocusEllipse"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <Visibility>Visible</Visibility> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> <ColorAnimation Duration="0" To="#FFDC3030" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="FocusEllipse" /> <ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="path" /> </Storyboard> </VisualState> <VisualState x:Name="Pressed"> <Storyboard> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="FocusEllipse"> <DiscreteObjectKeyFrame KeyTime="0"> <DiscreteObjectKeyFrame.Value> <Visibility>Visible</Visibility> </DiscreteObjectKeyFrame.Value> </DiscreteObjectKeyFrame> </ObjectAnimationUsingKeyFrames> <ColorAnimation Duration="0" To="Black" Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="FocusEllipse" /> <ColorAnimation Duration="0" To="White" Storyboard.TargetProperty="(Shape.Stroke).(SolidColorBrush.Color)" Storyboard.TargetName="path" /> </Storyboard> </VisualState> <VisualState x:Name="Disabled" /> </VisualStateGroup> <VisualStateGroup x:Name="FocusStates"> <VisualState x:Name="Focused" /> <VisualState x:Name="Unfocused" /> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Ellipse x:Name="FocusEllipse" Fill="#FFF13535" Visibility="Collapsed" /> <Path x:Name="path" Data="M0,0 L6,6 M6, 0 L0,6" Stroke="#FF898888" HorizontalAlignment="Center" VerticalAlignment="Center" StrokeThickness="1" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> <DataTemplate x:Key="TabItemTemplate1"> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <TextBlock Text="{Binding Header}" FontSize="16" /> <telerik:RadButton Command="{Binding RemoveItemCommand}" Style="{StaticResource CloseButton}" Margin="10,0,0,0" ToolTipService.ToolTip="Close" /> </StackPanel> </DataTemplate> <DataTemplate x:Key="ContentTemplate"> <UserControl Content="{Binding Content1}" /> </DataTemplate> <Style TargetType="telerik:RadTabItem"> <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> </Style> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White"> <Grid.ColumnDefinitions> <ColumnDefinition Width="200" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <telerik:RadTreeView Name="treeView" Grid.Column="0" Background="#FFD2E7FF" Width="200" AllowDrop="False" FontSize="12" SelectionChanged="treeView_SelectionChanged"> <telerik:RadTreeViewItem Header="Group A" IsExpanded="True"> <telerik:RadTreeViewItem Header="Page A-1" IsExpanded="False"> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Group B" IsExpanded="True"> <telerik:RadTreeViewItem Header="Page B-1" IsExpanded="False"> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Page B-2" IsExpanded="False"> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Page B-3" IsExpanded="False"> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Page B-4" IsExpanded="False"> </telerik:RadTreeViewItem> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Group C" IsExpanded="True"> <telerik:RadTreeViewItem Header="Page C-1" IsExpanded="False"> </telerik:RadTreeViewItem> </telerik:RadTreeViewItem> </telerik:RadTreeViewItem> </telerik:RadTreeView> <telerik:RadTabControl Grid.Column="1" Name="tabMain" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" DropDownDisplayMode="Collapsed" ScrollMode="Viewport" BorderThickness="0,1,0,0" Opacity="0.985" SelectedIndex="3" HeaderBackground="#62DED7C4" IsDropDownOpen="False" BorderBrush="#FF5D759C" FontWeight="Bold" ItemTemplate="{StaticResource TabItemTemplate1}" ItemsSource="{Binding Tabs}" ContentTemplate="{StaticResource ContentTemplate}" > </telerik:RadTabControl> </Grid></UserControl>"MainPage.xaml.cs"
public partial class MainPage : UserControl{ private MainViewModel mainViewModel = new MainViewModel(); public MainPage() { InitializeComponent(); this.DataContext = mainViewModel; } private object GetPage(RadTreeViewItem argTabItem) { return new SilverlightControl1(argTabItem.Header.ToString()); } private void treeView_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e) { if (treeView != null && treeView.SelectedItem != null) { RadTreeViewItem treeitem = treeView.SelectedItem as RadTreeViewItem; if (!treeitem.IsExpanded) { if (!mainViewModel.Tabs.Any(c => c.Header.ToString() == treeitem.Header.ToString())) { mainViewModel.AddItem(treeitem.Header.ToString(), GetPage(treeitem)); } } } }}"MainViewModel.cs"
public class MainViewModel{ public MainViewModel() { this.Tabs = new ObservableCollection<TabViewModel>(); } /// <summary> /// Gets the collection of tabs. /// </summary> public ObservableCollection<TabViewModel> Tabs { get; private set; } /// <summary> /// Adds new tab item to the Tabs collection. /// </summary> public void AddItem(string argHeader, object argContent) { TabViewModel newTabItem = new TabViewModel(this); newTabItem.Header = argHeader; newTabItem.IsSelected = true; newTabItem.Content1 = argContent; this.Tabs.Add(newTabItem); this.InvalidateCommands(); } /// <summary> /// Removes an item from the Tabs collection. /// </summary> /// <param name="tabItem">The tab item.</param> public void RemoveItem(TabViewModel tabItem) { this.Tabs.Remove(tabItem); this.InvalidateCommands(); } private void InvalidateCommands() { foreach (var tab in this.Tabs) { tab.RemoveItemCommand.InvalidateCanExecute(); } }}"TabViewModel.cs"
public class TabViewModel{ private bool isSelected; private readonly MainViewModel mainViewModel; public TabViewModel(MainViewModel mainViewModel) { this.mainViewModel = mainViewModel; this.RemoveItemCommand = new DelegateCommand( delegate { this.mainViewModel.RemoveItem(this); }, delegate { return true; }); } public string Header { get; set; } public bool IsSelected { get { return this.isSelected; } set { if (this.isSelected != value) { this.isSelected = value; this.OnPropertyChanged("IsSelected"); } } } public object Content1 { get; set; } public DelegateCommand RemoveItemCommand { get; set; } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } #endregion}"SilverlightControl1.xaml"
<Grid x:Name="LayoutRoot" Background="White"> <Button Name="btnText" FontSize="26"></Button></Grid>"SilverlightControl1.xaml.cs"
public partial class SilverlightControl1 : UserControl{ public SilverlightControl1(string argText) { InitializeComponent(); btnText.Content = argText; }}Thank you for the support.
