When you need to create objects in code, you can actually build up the entire look and feel in code.
This results in large blocks of code that do nothing special, but set the visual properties of an object:
Grid grdNow = new Grid();
//create Circle
Ellipse cirNow = new Ellipse();
cirNow.Height = 25;
cirNow.Width = 25;
cirNow.VerticalAlignment = VerticalAlignment .Center;
cirNow.HorizontalAlignment = HorizontalAlignment.Center;
cirNow.Fill = new SolidColorBrush (Colors.Red);
cirNow.Margin =new Thickness(5,5,5,5);
//create TextBlock
TextBlock txtNow = new TextBlock();
txtNow.VerticalAlignment = VerticalAlignment.Center;
txtNow.HorizontalAlignment = HorizontalAlignment.Center;
txtNow.Foreground = new SolidColorBrush(Colors.White);
txtNow.FontWeight = FontWeights.Bold;
txtNow.FontSize = 14;
txtNow.Margin =new Thickness(0,0,0,2);
txtNow.TextWrapping = TextWrapping.NoWrap;
txtNow.Text="now";
//add objects to grid
grdNow.Children.Add(cirNow);
grdNow.Children.Add(txtNow);
The drawback of this is that it is a lot of code and hard to maintain. The looks are integrated in the code and that is not what you want.
In Silverlight and WPF there is a standard model to separate the code from the look and feel of the application you’re building. It’s called XAML.
XAML is a markup language that’s easily generated by code and easily maintained by non-programmers with tools of even by hand.
When you are creating objects on the fly you should use Styles. These determine the way the object looks. Only keep the properties necessary for dynamically placing your object on the screen in your code:
Grid grdNow = new Grid();
Ellipse cirNow = new Ellipse();
TextBlock txtNow = new TextBlock();
cirNow.Style = App.Current.Resources["NowStyle"] as Style;
txtNow.Style = App.Current.Resources["NowTextStyle"] as Style;
grdNow.Children.Add(cirNow);
grdNow.Children.Add(txtNow);
This is a lot less code. Below is the markup that you shouldn’t have to worry about when you use Styles in your C# code.
You can even just create an empty Style block in App.xaml: <Style x:Key=”NowStyle” TargetType=”Ellipse” /> and thus use it with default values.
The look of these dynamically created objects can be changed later on or even be themed using a separate ResourceDictionary. A designer can come in at any time and change these properties using a Tool like Expression Blend.
<Style x:Key="NowStyle" TargetType="Ellipse">
<Setter Property="Height" Value="25"/>
<Setter Property="Width" Value="25"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Fill" Value="Red"/>
<Setter Property="Margin" Value="5"/>
</Style>
<Style x:Key="NowTextStyle" TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Margin" Value="0,0,0,2"/>
<Setter Property="TextWrapping" Value="NoWrap"/>
<Setter Property="Text" Value="nu"/>
</Style>
So, when you find yourself creating a lot of C# code to set the visual properties of a dynamically created objects: Stop!
Create a Style in XAML and refer to that Style instead.
Njoy!