Hi there, I'm just starting with first rehearsing with your controls and WPF, and I would like to change the color (or any other property) of the text displayed in a bound data column, using a simple ValueConverter that return a Black/Red SolidColorBrush based on the passed value:
and then in the XAML use an expression like this:
Is this possible ? Or what other way to keep it at simplest ?
regards
Ubaldo
MyPublic Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, _
ByVal culture As Globalization.CultureInfo) As Object _
Implements IValueConverter.Convert
Dim myColor As New SolidColorBrush(System.Windows.Media.Colors.Black)
Try
Dim cur As Decimal = CDec(value)
If cur < 0 Then myColor = New SolidColorBrush(System.Windows.Media.Colors.Red)
Catch ex As Exception
End Try
Return myColor
End Function
xxxx.ForecolorPropertyName={Binding Path=DataColumnName, Converter=MyClassConverter}
regards
Ubaldo
5 Answers, 1 is accepted
0
Hello Ubaldo,
In this case the style will be applied to all the cells in the grid. However, you may define the Style explicitly:
You may take a look at our online documentation for further reference. Greetings,
Maya
the Telerik team
The easiest way would be to create a Style targeting the GridViewCell:
<
Window.Resources
>
<
Style
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"Foreground"
Value
=
"HotPink"
/>
</
Style
>
</
Window.Resources
>
In this case the style will be applied to all the cells in the grid. However, you may define the Style explicitly:
<
Window.Resources
>
<
Style
x:Key
=
"MyCellStyle"
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"Foreground"
Value
=
"HotPink"
/>
</
Style
>
</
Window.Resources
>
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding Name}"
CellStyle
=
"{StaticResource MyCellStyle}"
/>
You may take a look at our online documentation for further reference. Greetings,
Maya
the Telerik team
Let us know about your Windows Phone 7 application built with RadControls and we will help you promote it. Learn more>>
0

Ubaldo
Top achievements
Rank 1
answered on 12 Jan 2011, 02:27 PM
Hi Maya, thanks for your quick reply.
Probably I don't get very well the concept, due to my inexperience, but what I'm trying to do is to have the fore color of the text that changes in relation to the value of the text. Is less than zero, the color should be Red, otherwise Black.
I know that the quickest way to achieve this in wpf is to create a ValueConverter class that return the color, so that in the binding expression of the value you can add the Converter= parameter that takes is value from the custom converter class.
You suggest to use Styles... so do u mean that I should use a style with a trigger inside ? Well, for sure less straightforward than the Converter used directly in a binding expression.
I would really appreciate a complete sample (easy goal: render the text of a cell in Red if the value of that text is less than zero, otherwise standard Black)
TIA
Ubaldo
Probably I don't get very well the concept, due to my inexperience, but what I'm trying to do is to have the fore color of the text that changes in relation to the value of the text. Is less than zero, the color should be Red, otherwise Black.
I know that the quickest way to achieve this in wpf is to create a ValueConverter class that return the color, so that in the binding expression of the value you can add the Converter= parameter that takes is value from the custom converter class.
You suggest to use Styles... so do u mean that I should use a style with a trigger inside ? Well, for sure less straightforward than the Converter used directly in a binding expression.
I would really appreciate a complete sample (easy goal: render the text of a cell in Red if the value of that text is less than zero, otherwise standard Black)
TIA
Ubaldo
0
Hi Ubaldo,
Maya
the Telerik team
In this case you may use a CellStyleSelector as described in our online documentation and illustrated in our demos.
Maya
the Telerik team
Let us know about your Windows Phone 7 application built with RadControls and we will help you promote it. Learn more>>
0

Ubaldo
Top achievements
Rank 1
answered on 12 Jan 2011, 03:51 PM
Ok, got it. It works, but with some issues that I would like to clarify. First, here the code (my GridView is bound to a CollectionViewSource generated by a standard ADO DataSet, and so returns a DataTable)
I've tried to make the StyleSelector the more generic as possible, accepting a ColumnName parameter in order to select the column of which to test the value.
In the resources I've defined the two style colors, and the StyleSelector:
Now, in the GridWiev xaml, I've referenced the StyleSelector:
Q1: a lot of xaml for a simple task as this
Q2: if I want to apply this style selector to 20 different columns, should I define 20 different NumberColorStyle static resources so that each one of them can set the ColumnName ? How can I pass the ColumnName directly from the GridViewDataColumn tag ?
TIA
Ubaldo
Public
Class
NumberColorStyle
Inherits
StyleSelector
Public
Property
PositiveStyle()
As
Style
Public
Property
NegativeStyle()
As
Style
Public
Property
ColumnName()
As
String
Public
Overrides
Function
SelectStyle(
ByVal
item
As
Object
,
ByVal
container
As
DependencyObject)
As
Style
If
TypeOf
item
Is
System.Data.DataRowView
Then
Dim
drow
As
System.Data.DataRowView =
CType
(item, System.Data.DataRowView)
If
_ColumnName <>
""
Then
Try
Dim
cval
As
Decimal
=
CDec
(drow.Item(_ColumnName))
If
cval < 0
Then
Return
NegativeStyle
Else
Return
PositiveStyle
End
If
Catch
ex
As
Exception
End
Try
End
If
End
If
Return
Nothing
End
Function
End
Class
I've tried to make the StyleSelector the more generic as possible, accepting a ColumnName parameter in order to select the column of which to test the value.
In the resources I've defined the two style colors, and the StyleSelector:
<
Style
x:Key
=
"ForeColorBlackStyle"
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"Foreground"
Value
=
"Black"
></
Setter
>
</
Style
>
<
Style
x:Key
=
"ForeColorRedStyle"
TargetType
=
"telerik:GridViewCell"
>
<
Setter
Property
=
"Foreground"
Value
=
"Red"
></
Setter
>
</
Style
>
<
local:NumberColorStyle
x:Key
=
"NumberColorStyle" ColumnName="importo"
PositiveStyle
=
"{StaticResource ForeColorBlackStyle}"
NegativeStyle
=
"{StaticResource ForeColorRedStyle}"
></
local:NumberColorStyle
>
<
telerik:GridViewDataColumn
Header
=
"Importo (EUR)"
DataMemberBinding
=
"{Binding importo}"
UniqueName
=
"importo"
DataFormatString
=
"{} {0:C}"
TextAlignment
=
"Right"
CellStyleSelector
=
"{StaticResource NumberColorStyle}"
>
Q1: a lot of xaml for a simple task as this
Q2: if I want to apply this style selector to 20 different columns, should I define 20 different NumberColorStyle static resources so that each one of them can set the ColumnName ? How can I pass the ColumnName directly from the GridViewDataColumn tag ?
TIA
Ubaldo
0
Accepted
Hello Ubaldo,
Once you get the myColumn variable, you may get its UniqueName property.
Regards,
Maya
the Telerik team
Generally, when you have a lot of items and columns defined, using a IValueConverter is not an optimized solution as it may lead to some performance issues. As for taking the right column in the StyleSelector class, you may use the container argument which will be of type GridViewCell and find the column it belongs to by its Column property:
var cell = container as GridViewCell;
var myColumn = cell.Column as GridViewDataColumn;
Regards,
Maya
the Telerik team
Let us know about your Windows Phone 7 application built with RadControls and we will help you promote it. Learn more>>