Hello Forum
I was following your Tutorial about "Styling a Cell" (http://www.telerik.com/help/wpf/gridview-styling-cell.html). My ViewModel implements INotifyDataErrorInfo and exposes Errors through it.
When i am hovering the mouse over the red triangle to see the error tool tip, i get the following Exception: 'xform' name cannot be found in the name scope of 'System.Windows.Controls.Grid'.
Do you have any suggestions?
Thanks,
Michael
Here is my Code:
...by the way: i have prepared a sample solution, but i can't attach it to the post.
MainWindow.xaml:
MainWindow.xaml.cs:
ViewModel.cs:
I was following your Tutorial about "Styling a Cell" (http://www.telerik.com/help/wpf/gridview-styling-cell.html). My ViewModel implements INotifyDataErrorInfo and exposes Errors through it.
When i am hovering the mouse over the red triangle to see the error tool tip, i get the following Exception: 'xform' name cannot be found in the name scope of 'System.Windows.Controls.Grid'.
Do you have any suggestions?
Thanks,
Michael
Here is my Code:
...by the way: i have prepared a sample solution, but i can't attach it to the post.
MainWindow.xaml:
<
Window
x:Class
=
"TelerikGridViewCellStyle.MainWindow"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:telerikGridViewCellStyle
=
"clr-namespace:TelerikGridViewCellStyle"
mc:Ignorable
=
"d"
Title
=
"MainWindow"
Height
=
"350"
Width
=
"525"
d:DataContext
=
"{d:DesignInstance telerikGridViewCellStyle:ViewModel}"
>
<
Window.Resources
>
<
Style
TargetType
=
"{x:Type telerik:GridViewCell}"
>
<
Setter
Property
=
"Template"
>
<
Setter.Value
>
<
ControlTemplate
TargetType
=
"{x:Type telerik:GridViewCell}"
>
<
Grid
>
<
VisualStateManager.VisualStateGroups
>
<
VisualStateGroup
x:Name
=
"SelectionStates"
>
<
VisualState
x:Name
=
"Unselected"
/>
<
VisualState
x:Name
=
"Selected"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Selected"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
<
VisualStateGroup
x:Name
=
"CommonStates"
>
<
VisualState
x:Name
=
"Normal"
/>
<
VisualState
x:Name
=
"Current"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Current"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
<
VisualState
x:Name
=
"MouseOver"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Over"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
<
VisualStateGroup
x:Name
=
"EditingStates"
>
<
VisualState
x:Name
=
"Edited"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Margin"
Storyboard.TargetName
=
"PART_ContentPresenter"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Thickness
>0</
Thickness
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"VerticalAlignment"
Storyboard.TargetName
=
"PART_ContentPresenter"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
VerticalAlignment
>Stretch</
VerticalAlignment
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Background"
Storyboard.TargetName
=
"PART_CellBorder"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
SolidColorBrush
Color
=
"White"
/>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
<
VisualState
x:Name
=
"Display"
/>
</
VisualStateGroup
>
<
VisualStateGroup
x:Name
=
"DisabledStates"
>
<
VisualState
x:Name
=
"Enabled"
/>
<
VisualState
x:Name
=
"Disabled"
>
<
Storyboard
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Opacity"
Storyboard.TargetName
=
"PART_CellBorder"
>
<
DiscreteDoubleKeyFrame
KeyTime
=
"0"
Value
=
"0.4"
/>
</
DoubleAnimationUsingKeyFrames
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Opacity"
Storyboard.TargetName
=
"PART_ContentPresenter"
>
<
DiscreteDoubleKeyFrame
KeyTime
=
"0"
Value
=
"0.7"
/>
</
DoubleAnimationUsingKeyFrames
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Disabled"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
<
VisualStateGroup
x:Name
=
"ValueStates"
>
<
VisualState
x:Name
=
"CellValid"
/>
<
VisualState
x:Name
=
"CellInvalid"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Invalid"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
<
VisualState
x:Name
=
"InvalidUnfocused"
>
<
Storyboard
>
<
ObjectAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Visibility"
Storyboard.TargetName
=
"Background_Invalid_Unfocused"
>
<
DiscreteObjectKeyFrame
KeyTime
=
"0"
>
<
DiscreteObjectKeyFrame.Value
>
<
Visibility
>Visible</
Visibility
>
</
DiscreteObjectKeyFrame.Value
>
</
DiscreteObjectKeyFrame
>
</
ObjectAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
</
VisualStateManager.VisualStateGroups
>
<
Border
x:Name
=
"PART_CellBorder"
BorderBrush
=
"{TemplateBinding VerticalGridLinesBrush}"
Background
=
"{Binding Background, RelativeSource={RelativeSource TemplatedParent}}"
Margin
=
"1,0,0,0"
>
<
Border.BorderThickness
>
<
Binding
ConverterParameter
=
"Right"
Path
=
"VerticalGridLinesWidth"
RelativeSource
=
"{RelativeSource TemplatedParent}"
>
<
Binding.Converter
>
<
telerik:GridLineWidthToThicknessConverter
/>
</
Binding.Converter
>
</
Binding
>
</
Border.BorderThickness
>
</
Border
>
<
Border
x:Name
=
"Background_Over"
BorderBrush
=
"#FFFFC92B"
BorderThickness
=
"1"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
CornerRadius
=
"1"
Margin
=
"1,1,2,2"
Visibility
=
"Collapsed"
>
<
Border
BorderBrush
=
"White"
BorderThickness
=
"1"
>
<
Border.Background
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FFFFFBA3"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FFFFFBDA"
Offset
=
"0"
/>
</
LinearGradientBrush
>
</
Border.Background
>
</
Border
>
</
Border
>
<
Border
x:Name
=
"Background_Selected"
BorderBrush
=
"#FFFFC92B"
BorderThickness
=
"1"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
CornerRadius
=
"1"
Margin
=
"1,1,2,2"
Visibility
=
"Collapsed"
>
<
Border
BorderBrush
=
"White"
BorderThickness
=
"1"
>
<
Border.Background
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FFFCE79F"
Offset
=
"1"
/>
<
GradientStop
Color
=
"#FFFDD3A8"
/>
</
LinearGradientBrush
>
</
Border.Background
>
</
Border
>
</
Border
>
<
Border
x:Name
=
"Background_Current"
BorderBrush
=
"#FF848484"
BorderThickness
=
"1"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
CornerRadius
=
"1"
Margin
=
"1,1,2,2"
Visibility
=
"Collapsed"
/>
<
Border
x:Name
=
"Background_Invalid"
BorderBrush
=
"#FFDB000C"
BorderThickness
=
"1"
Background
=
"White"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
CornerRadius
=
"1"
Margin
=
"1,1,2,2"
Visibility
=
"Collapsed"
>
<
Border.ToolTip
>
<
ToolTip
x:Name
=
"validationTooltip"
Content
=
"{TemplateBinding Errors}"
Placement
=
"Right"
>
<
ToolTip.Template
>
<
ControlTemplate
TargetType
=
"{x:Type ToolTip}"
>
<
Grid
x:Name
=
"Root"
Margin
=
"5,0"
Opacity
=
"0"
RenderTransformOrigin
=
"0,0"
>
<
Grid.RenderTransform
>
<
TranslateTransform
X
=
"-25"
/>
</
Grid.RenderTransform
>
<
VisualStateManager.VisualStateGroups
>
<
VisualStateGroup
x:Name
=
"OpenStates"
>
<
VisualStateGroup.Transitions
>
<
VisualTransition
From
=
"{x:Null}"
GeneratedDuration
=
"0"
GeneratedEasingFunction
=
"{x:Null}"
Storyboard
=
"{x:Null}"
To
=
"{x:Null}"
/>
<
VisualTransition
From
=
"{x:Null}"
GeneratedDuration
=
"0:0:0.2"
GeneratedEasingFunction
=
"{x:Null}"
To
=
"Open"
>
<
Storyboard
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"X"
Storyboard.TargetName
=
"xform"
>
<
SplineDoubleKeyFrame
KeyTime
=
"0:0:0.2"
Value
=
"0"
/>
</
DoubleAnimationUsingKeyFrames
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Opacity"
Storyboard.TargetName
=
"Root"
>
<
SplineDoubleKeyFrame
KeyTime
=
"0:0:0.2"
Value
=
"1"
/>
</
DoubleAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualTransition
>
</
VisualStateGroup.Transitions
>
<
VisualState
x:Name
=
"Closed"
>
<
Storyboard
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Opacity"
Storyboard.TargetName
=
"Root"
>
<
SplineDoubleKeyFrame
KeyTime
=
"0"
Value
=
"0"
/>
</
DoubleAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
<
VisualState
x:Name
=
"Open"
>
<
Storyboard
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"X"
Storyboard.TargetName
=
"xform"
>
<
SplineDoubleKeyFrame
KeyTime
=
"0"
Value
=
"0"
/>
</
DoubleAnimationUsingKeyFrames
>
<
DoubleAnimationUsingKeyFrames
Storyboard.TargetProperty
=
"Opacity"
Storyboard.TargetName
=
"Root"
>
<
SplineDoubleKeyFrame
KeyTime
=
"0"
Value
=
"1"
/>
</
DoubleAnimationUsingKeyFrames
>
</
Storyboard
>
</
VisualState
>
</
VisualStateGroup
>
</
VisualStateManager.VisualStateGroups
>
<
Border
Background
=
"#052A2E31"
CornerRadius
=
"5"
Margin
=
"4,4,-4,-4"
/>
<
Border
Background
=
"#152A2E31"
CornerRadius
=
"4"
Margin
=
"3,3,-3,-3"
/>
<
Border
Background
=
"#252A2E31"
CornerRadius
=
"3"
Margin
=
"2,2,-2,-2"
/>
<
Border
Background
=
"#352A2E31"
CornerRadius
=
"2"
Margin
=
"1,1,-1,-1"
/>
<
Border
Background
=
"#FFDC000C"
CornerRadius
=
"2"
/>
<
Border
CornerRadius
=
"2"
>
<
ItemsControl
>
<
ItemsControl.ItemsPanel
>
<
ItemsPanelTemplate
>
<
StackPanel
IsItemsHost
=
"True"
/>
</
ItemsPanelTemplate
>
</
ItemsControl.ItemsPanel
>
<
ItemsControl.ItemTemplate
>
<
DataTemplate
>
<
TextBlock
Foreground
=
"White"
MaxWidth
=
"250"
Margin
=
"8,4"
TextWrapping
=
"Wrap"
Text
=
"{Binding}"
/>
</
DataTemplate
>
</
ItemsControl.ItemTemplate
>
</
ItemsControl
>
</
Border
>
</
Grid
>
</
ControlTemplate
>
</
ToolTip.Template
>
</
ToolTip
>
</
Border.ToolTip
>
<
Grid
Background
=
"Transparent"
HorizontalAlignment
=
"Right"
Height
=
"12"
Margin
=
"1,-4,-4,0"
VerticalAlignment
=
"Top"
Width
=
"12"
>
<
Path
Data
=
"M1,0L6,0A2,2,90,0,1,8,2L8,7z"
Fill
=
"#FFDB000C"
Margin
=
"1,3,0,0"
/>
<
Path
Data
=
"M0,0L2,0 8,6 8,8"
Fill
=
"White"
Margin
=
"1,3,0,0"
/>
</
Grid
>
</
Border
>
<
Border
x:Name
=
"Background_Invalid_Unfocused"
BorderBrush
=
"#FFCE7D7D"
BorderThickness
=
"1"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
CornerRadius
=
"1"
Margin
=
"1,1,1,2"
Opacity
=
"1"
Visibility
=
"Collapsed"
>
<
Border
BorderThickness
=
"1"
>
<
Border.BorderBrush
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FFEBF4FD"
/>
<
GradientStop
Color
=
"#FFDBEAFD"
Offset
=
"1"
/>
</
LinearGradientBrush
>
</
Border.BorderBrush
>
<
Border.Background
>
<
LinearGradientBrush
EndPoint
=
"0.5,1"
StartPoint
=
"0.5,0"
>
<
GradientStop
Color
=
"#FFFCDCDC"
/>
<
GradientStop
Color
=
"#FFFCC1C1"
Offset
=
"1"
/>
</
LinearGradientBrush
>
</
Border.Background
>
</
Border
>
</
Border
>
<
Border
x:Name
=
"Background_Disabled"
BorderBrush
=
"#FFF8F8F8"
BorderThickness
=
"1"
Background
=
"#FFE0E0E0"
Grid.ColumnSpan
=
"2"
Grid.Column
=
"2"
Margin
=
"0,0,1,1"
Visibility
=
"Collapsed"
/>
<
ContentPresenter
x:Name
=
"PART_ContentPresenter"
ContentTemplate
=
"{TemplateBinding ContentTemplate}"
Content
=
"{TemplateBinding Content}"
HorizontalAlignment
=
"{TemplateBinding HorizontalContentAlignment}"
Margin
=
"{TemplateBinding Padding}"
VerticalAlignment
=
"{TemplateBinding VerticalContentAlignment}"
/>
</
Grid
>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
<
Setter
Property
=
"Padding"
Value
=
"5,0,3,0"
/>
<
Setter
Property
=
"BorderBrush"
Value
=
"#FFCBCBCB"
/>
<
Setter
Property
=
"BorderThickness"
Value
=
"0,0,1,0"
/>
<
Setter
Property
=
"VerticalContentAlignment"
Value
=
"Center"
/>
<
Setter
Property
=
"HorizontalContentAlignment"
Value
=
"Stretch"
/>
<
Setter
Property
=
"Background"
Value
=
"Transparent"
/>
<
Setter
Property
=
"SnapsToDevicePixels"
Value
=
"True"
/>
<
Setter
Property
=
"FocusVisualStyle"
>
<
Setter.Value
>
<
Style
>
<
Setter
Property
=
"Control.Template"
>
<
Setter.Value
>
<
ControlTemplate
>
<
Border
BorderBrush
=
"#FF848484"
BorderThickness
=
"1"
CornerRadius
=
"1"
Margin
=
"1,1,2,2"
/>
</
ControlTemplate
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Setter.Value
>
</
Setter
>
</
Style
>
</
Window.Resources
>
<
Grid
>
<
telerik:RadGridView
ItemsSource
=
"{Binding Items}"
/>
</
Grid
>
</
Window
>
MainWindow.xaml.cs:
using
System.Windows;
namespace
TelerikGridViewCellStyle
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public
partial
class
MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
DataContext =
new
ViewModel();
}
}
}
ViewModel.cs:
using
System;
using
System.Collections;
using
System.Collections.ObjectModel;
using
System.ComponentModel;
namespace
TelerikGridViewCellStyle
{
public
class
ViewModel
{
public
ObservableCollection<DataItem> Items {
get
;
set
; }
public
ViewModel()
{
Items =
new
ObservableCollection<DataItem>();
Items.Add(
new
DataItem {A =
"ABC"
, B =
"hihi"
});
Items.Add(
new
DataItem {A =
"DEF"
, B =
"hihi"
});
Items.Add(
new
DataItem {A =
"GHI"
, B =
"hihi"
});
}
}
public
class
DataItem : INotifyDataErrorInfo
{
public
string
A {
get
;
set
; }
public
string
B {
get
;
set
; }
public
IEnumerable GetErrors(
string
propertyName)
{
return
"Error"
;
}
public
bool
HasErrors {
get
{
return
true
; } }
public
event
EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
}
}