With the Silverlight versions evolving day by day, expectations of application designers to enhance the UI is increasing. It won't be wrong to say that Silverlight has been successful to keep pace with their expectations. However, while I was thinking so, I came across a small limitation in Silverlight. At the time of writing this blog and Silverlight 5.0 already in use, it was surprising to see that Silverlight is yet to provide a Text Strikethrough font. With lot of formatting options available, the only Text Decoration feature available is 'Underline'. You can simply use this code to get an underline text.
<TextBlock TextDecorations="underline">Hi there</TextBlock> But what about Strikethrough feature? After visiting lot of web pages, I found that only solution is to customize the UI, by placing a Line object over the TextBlock. In this blog, I am putting up a small code implementation for C1FlexGrid for Silverlight to show a Strikethrough text in the grid cells. To implement this we will use the CellFactory Class to customize the Cell content.
Public Class MyCellFactory Inherits C1.Silverlight.FlexGrid.CellFactory Public Overrides Sub CreateCellContent(grid As C1.Silverlight.FlexGrid.C1FlexGrid, bdr As System.Windows.Controls.Border, rng As C1.Silverlight.FlexGrid.CellRange) MyBase.CreateCellContent(grid, bdr, rng) If rng.Column = 0 Then Dim obj = bdr.Child If obj.GetType() Is GetType(TextBlock) Then If Not CType(obj, TextBlock).Text = String.Empty Then bdr.Child = Nothing Dim width As Integer = 0 Dim height As Integer = 0 If CType(obj, TextBlock) IsNot Nothing Then width = CType(obj, TextBlock).ActualWidth height = CType(obj, TextBlock).ActualHeight End If Dim ln As New Line ln.Stroke = New SolidColorBrush(Colors.Red) ln.StrokeThickness = 1 ln.X1 = 0 ln.Y1 = (height / 2) + 3 ln.X2 = width + 1 ln.Y2 = (height / 2) + 3 Dim grd As New Grid grd.Children.Add(ln) grd.Children.Add(obj) DirectCast(obj, TextBlock).Foreground = New SolidColorBrush(Colors.Green) bdr.Child = grd End If End If End If End Sub End Class
Applying the above CellFactory object to your C1FlexGrid control will get the text Strikethrough effect. While ending this blog here, I hope we will soon see this feature implemented by default in future Silverlight versions. Download the samples for complete implementation. Download VB Sample Download C# Sample