WPF Reusability Factor – User Controls & Custom Controls

There is always seen a perplexity/confusion exist in terms of User Controls and Custom Controls in regards to WPF. They both work alike in terms of reusability, like you can reuse them over and over, again and again. But there are also finite number of differences between them. And in today's post I’ll highlight them with the help of examples.

A User Control is actually a composite of other UI controls, that means it is composing it with the help of other controls and that can be styled and reused as needed. You compose the existing controls in a User Control using XAML like we do in case of Window or so. And the interaction is done in the code behind, if needed. User Control is derived from a ContentControl (Figure-1). That means it Can only have one Child by nature that you set with the help of its content property. In order to compose with more elements, you need to have a Composite Control like a Panel as its root, like we see in case of compositing the Window itself.

Lets now turn our focus to the Custom Control. By Custom Control we mean it is customizable by the end user/consumer. Lets see how! You derive it from Control or ContentControl or other rich controls like RadioButton control or checkbox control etc. It takes part in the themes as well as skinning mechanism for the end users/consumers with the help of Generic theme defined under Themes/Generic.xaml, where you redefine the ControlTemplate or Visual Tree for this custom control and also provide with a default style as needed. Custom controls provides a much more flexible model in terms of customization as well as reusability as compared to User Controls. If the consumer wants to apply a different theme, all he needs to do is to change the control-template/style of that custom control and that's it, it is customized.

UserControls-CustomControls Figure-1

I’ll explain you all these concepts with the help of a concrete example. Here is how the Project looks like:

image Figure-2

I have created a MainWindow that is composed of a Grid that has two rows. First Row contains a Custom Control “GlassRadioControl” and Row#2 contains a User Control (MessageBoxControl) that mimics more like a MessageWindow or so. Class Hierarchy is shown in the Figure-1 above. Here is the XAML for it.

Code Snippet
  1. <Window x:Class="WpfTestApp.MainWindow"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     xmlns:local="clr-namespace:WpfTestApp"
  5.     Title="[Custom Control] vs [User Control]" Height="300" Width="500">
  6.     <Window.Resources>
  7.         <Style x:Key="MessageBoxControlStyle1" TargetType="{x:Type local:MessageBoxControl}">
  8.             <Setter Property="Background" Value="LightGreen" />
  9.             <Setter Property="BorderBrush" Value="Gray" />
  10.             <Setter Property="BorderThickness" Value="2" />
  11.             <Setter Property="Template">
  12.                 <Setter.Value>
  13.                     <ControlTemplate TargetType="{x:Type local:MessageBoxControl}">
  14.                         <Border SnapsToDevicePixels="true"
  15.                             Background="{TemplateBinding Background}"
  16.                             BorderBrush="{TemplateBinding BorderBrush}"
  17.                             BorderThickness="{TemplateBinding BorderThickness}"
  18.                             Padding="{TemplateBinding Padding}">
  19.                         <ContentPresenter
  20.                             HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
  21.                             VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
  22.                             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
  23.                         </Border>
  24.                     </ControlTemplate>
  25.                 </Setter.Value>
  26.             </Setter>
  27.         </Style>
  28.     </Window.Resources>
  29.     <Grid Margin="5" Background="Beige">
  30.         <Grid.RowDefinitions>
  31.             <RowDefinition Height="57" />
  32.             <RowDefinition />
  33.         </Grid.RowDefinitions>
  34.         <GroupBox Header="Custom Control's Example" Margin="3">
  35.             <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
  36.                 <local:GlassRadioControl DockPanel.Dock="Top" IsChecked="True" LeftColumnWidth="77" />
  37.                 <local:GlassRadioControl DockPanel.Dock="Top" IsRadioChecked="{x:Null}" LeftColumnWidth="77"/>
  38.                 <local:GlassRadioControl IsRadioChecked="False" LeftColumnWidth="77"/>
  39.             </StackPanel>
  40.         </GroupBox>
  41.         <GroupBox Grid.Row="1" Header="User Control's Example" Margin="3">
  42.             <local:MessageBoxControl Message="Hello World"
  43.                 Style="{DynamicResource MessageBoxControlStyle1}" />
  44.         </GroupBox>
  45.     </Grid>
  46. </Window>

Figure-3

Here is the output of the User Control’s:

image Figure-4

and the XAML is shown below.

Code Snippet
  1. <UserControl x:Class="WpfTestApp.MessageBoxControl"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  4.  
  5.     <Grid>
  6.         <Grid.RowDefinitions>
  7.             <RowDefinition Height="*"/>
  8.             <RowDefinition Height="37"/>
  9.         </Grid.RowDefinitions>
  10.         <Border BorderThickness="1" Opacity="0.75">
  11.             <TextBlock x:Name="MessageText" Text="Message here" Margin="2" VerticalAlignment="Center" />
  12.         </Border>
  13.         <Border Grid.Row="1" Background="LightGray" Opacity="0.65" >
  14.             <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Margin="5">
  15.                 <Button Content="Cancel" Margin="1" Width="100" Click="ButtonCancelClick" />
  16.                 <Button Content="OK" IsDefault="True" Click="ButtonOkClick" Margin="1" Width="100" />
  17.             </StackPanel>
  18.         </Border>
  19.     </Grid>
  20. </UserControl>

Figure-5

Basically we composed a TextBlock control and Two button controls and lay them out in the Grid and we have the UserControl ready. And the instance is created at line 42, Figure-3 above.

Lets now move on to the Custom Control, GlassRadioControl. This Control is derived from RadioButton (See Figure-1). And what’s the rationale behind extending the RadioButton, is actually we wanted the same behavior as of RadioButton but it should have a look and feel of a specialized split button. This could have done by using just the Control as a base with a little more hard work. Here is what we wanted to accomplish in this Custom-Control:

1) When it is selected, it should have an outline around it.
2) The button has to be split to show text on your Left and visual representation on the right, that is based on some state. Like When it is ok to Run, shows a Tick mark, while if its in progress shows revolving/animated Arrowed-Circle and when there is an error shows a cross, etc. Here is how it looks like for different states:


image

 Figure-6

In order to achieve this, I have modified the control template in the Themes/Generic.xaml, and here is how it looks like (see line 69):

Code Snippet
  1. <ResourceDictionary
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     xmlns:local="clr-namespace:WpfTestApp">
  5.  
  6.     <Style x:Key="CrossPathStyle" TargetType="{x:Type Path}" >
  7.         <Setter Property="Data" Value="M0,0L10,10 M10,0L0,10"/>
  8.         <Setter Property="Stroke" Value="#FFFF0000"/>
  9.         <Setter Property="StrokeThickness" Value="1.25"/>
  10.         <Setter Property="StrokeStartLineCap" Value="Round"/>
  11.         <Setter Property="StrokeEndLineCap" Value="Round"/>
  12.         <Setter Property="StrokeLineJoin" Value="Round"/>
  13.         <Setter Property="RenderTransformOrigin" Value="0.479,0.475"/>
  14.         <Setter Property="Opacity" Value="0.75"/>
  15.         <Setter Property="RenderTransform">
  16.             <Setter.Value>
  17.                 <TransformGroup>
  18.                     <ScaleTransform ScaleX="1" ScaleY="1"/>
  19.                     <SkewTransform AngleX="0" AngleY="0"/>
  20.                     <RotateTransform Angle="0"/>
  21.                     <TranslateTransform X="0" Y="0"/>
  22.                 </TransformGroup>
  23.             </Setter.Value>
  24.         </Setter>
  25.     </Style>
  26.  
  27.     <Style x:Key="TickPathStyle" TargetType="{x:Type Path}">
  28.         <Setter Property="Data" Value="M0,5L3,10 10,0"/>
  29.         <Setter Property="Stroke" Value="#FF90EE90"/>
  30.         <Setter Property="StrokeThickness" Value="1.25"/>
  31.         <Setter Property="StrokeStartLineCap" Value="Round"/>
  32.         <Setter Property="StrokeEndLineCap" Value="Round"/>
  33.         <Setter Property="StrokeLineJoin" Value="Round"/>
  34.         <Setter Property="RenderTransformOrigin" Value="0.479,0.475"/>
  35.         <Setter Property="Opacity" Value="0.75"/>
  36.         <Setter Property="RenderTransform">
  37.             <Setter.Value>
  38.                 <TransformGroup>
  39.                     <ScaleTransform ScaleX="1" ScaleY="1"/>
  40.                     <SkewTransform AngleX="0" AngleY="0"/>
  41.                     <RotateTransform Angle="0"/>
  42.                     <TranslateTransform X="0" Y="0"/>
  43.                 </TransformGroup>
  44.             </Setter.Value>
  45.         </Setter>
  46.     </Style>
  47.     
  48.     <Style x:Key="ArrowRoundPath" TargetType="{x:Type Path}">
  49.         <Setter Property="RenderTransformOrigin" Value="0.556,0.5" />
  50.         <!--<Setter Property="Margin" Value="0,0,0,10" />-->
  51.         <Setter Property="Stretch" Value="Uniform" />
  52.         <Setter Property="Stroke" Value="#BF0000FF" />
  53.         <Setter Property="StrokeThickness" Value="2.75" />
  54.         <Setter Property="StrokeMiterLimit" Value="2.5" />
  55.         <Setter Property="Data" Value="M6.8783809,21.019825 C5.7961721,19.096961 5.1789828,16.872546 5.1789828,14.499944 5.1789828,7.228976 10.982436,1.333335 18.142628,1.333335 25.30132,1.333335 31.104814,7.228976 31.104814,14.499944 31.104814,21.771013 25.30132,27.666664 18.142628,27.666664 15.331431,27.666664 12.729834,26.756829 10.606237,25.213419 M9.1658801,15.547488 L1.333335,19.323817 7.9703076,22.081687 9.1658801,15.547488 z" />
  56.         <Setter Property="RenderTransform">
  57.             <Setter.Value>
  58.                 <TransformGroup>
  59.                     <ScaleTransform ScaleX="-1" ScaleY="1"/>
  60.                     <SkewTransform AngleX="0" AngleY="0"/>
  61.                     <RotateTransform Angle="0"/>
  62.                     <TranslateTransform X="0" Y="0"/>
  63.                 </TransformGroup>
  64.             </Setter.Value>
  65.         </Setter>
  66.         <Setter Property="Opacity" Value="0.75"/>
  67.     </Style>
  68.     
  69.     <ControlTemplate x:Key="GlassRadioTemplate" TargetType="{x:Type local:GlassRadioControl}">
  70.         <ControlTemplate.Resources>
  71.             <Storyboard x:Key="OnLoaded1">
  72.                 <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="path2" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)" RepeatBehavior="Forever">
  73.                     <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
  74.                     <SplineDoubleKeyFrame KeyTime="00:00:01.0000000" Value="360"/>
  75.                 </DoubleAnimationUsingKeyFrames>
  76.             </Storyboard>
  77.             <Storyboard x:Key="Timeline1">
  78.                 <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)">
  79.                     <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="1"/>
  80.                 </DoubleAnimationUsingKeyFrames>
  81.             </Storyboard>
  82.             <Storyboard x:Key="Timeline2">
  83.                 <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="glow" Storyboard.TargetProperty="(UIElement.Opacity)">
  84.                     <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
  85.                 </DoubleAnimationUsingKeyFrames>
  86.             </Storyboard>
  87.         </ControlTemplate.Resources>
  88.         <Border BorderBrush="#FFFFFFFF" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
  89.             <Border x:Name="border" Background="#7F000000" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4">
  90.                 <Grid>
  91.                     <Grid.RowDefinitions>
  92.                         <RowDefinition Height="0.55*"/>
  93.                         <RowDefinition Height="0.45*" />
  94.                     </Grid.RowDefinitions>
  95.                     <Border Opacity="0" HorizontalAlignment="Stretch" x:Name="glow" Width="Auto" Grid.RowSpan="2" CornerRadius="4,4,4,4">
  96.                         <Border.Background>
  97.                             <RadialGradientBrush>
  98.                                 <RadialGradientBrush.RelativeTransform>
  99.                                     <TransformGroup>
  100.                                         <ScaleTransform ScaleX="1.702" ScaleY="2.243"/>
  101.                                         <SkewTransform AngleX="0" AngleY="0"/>
  102.                                         <RotateTransform Angle="0"/>
  103.                                         <TranslateTransform X="-0.368" Y="-0.152"/>
  104.                                     </TransformGroup>
  105.                                 </RadialGradientBrush.RelativeTransform>
  106.                                 <GradientStop Color="#B28DBDFF" Offset="0"/>
  107.                                 <GradientStop Color="#008DBDFF" Offset="1"/>
  108.                             </RadialGradientBrush>
  109.                         </Border.Background>
  110.                     </Border>
  111.                     <Grid Grid.Row="0" Grid.RowSpan="2" Margin="0">
  112.                         <Grid.ColumnDefinitions>
  113.                             <ColumnDefinition Width="{TemplateBinding LeftColumnWidth}" />
  114.                             <ColumnDefinition Width="{TemplateBinding RightColumnWidth}" />
  115.                         </Grid.ColumnDefinitions>
  116.  
  117.                         <ContentPresenter Grid.Column="0" Margin="3,0,0,0" x:Name="contentPresenter"
  118.                                 Content="{TemplateBinding Content}"
  119.                                 ContentTemplate="{TemplateBinding ContentTemplate}"
  120.                                 HorizontalAlignment="Center"
  121.                                 VerticalAlignment="Center" />
  122.  
  123.                         <Border Grid.Column="1" BorderBrush="Silver" BorderThickness="1.5,0,0,0" />
  124.                         <Border Grid.Column="1" BorderBrush="Black" BorderThickness="1.25,0,0,0" />
  125.                         <Viewbox Grid.Column="1" x:Name="view1" Visibility="Visible" Margin="5" RenderTransformOrigin="0.5,0.5">
  126.                             <Path x:Name="path" Style="{StaticResource CrossPathStyle}" />
  127.                         </Viewbox>
  128.                         <Viewbox Grid.Column="1" x:Name="view2" Visibility="Collapsed" Margin="2">
  129.                             <Path x:Name="path2" Style="{StaticResource ArrowRoundPath}"/>
  130.                         </Viewbox>
  131.                     </Grid>
  132.                     <Border HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="shine" Width="Auto" CornerRadius="4,4,0,0">
  133.                         <Border.Background>
  134.                             <LinearGradientBrush EndPoint="0.494,0.889" StartPoint="0.494,0.028">
  135.                                 <GradientStop Color="#99FFFFFF" Offset="0"/>
  136.                                 <GradientStop Color="#33FFFFFF" Offset="1"/>
  137.                             </LinearGradientBrush>
  138.                         </Border.Background>
  139.                     </Border>
  140.                 </Grid>
  141.             </Border>
  142.         </Border>
  143.         <ControlTemplate.Triggers>
  144.             <Trigger Property="IsChecked" Value="True">
  145.                 <Setter Property="BorderBrush" TargetName="border" Value="#FFFFA500"/>
  146.             </Trigger>
  147.             <Trigger Property="IsPressed" Value="True">
  148.                 <Setter Property="Opacity" TargetName="shine" Value="0.4"/>
  149.                 <Setter Property="Background" TargetName="border" Value="#CC000000"/>
  150.                 <Setter Property="Visibility" TargetName="glow" Value="Hidden"/>
  151.             </Trigger>
  152.             <Trigger Property="IsMouseOver" Value="True">
  153.                 <Trigger.EnterActions>
  154.                     <BeginStoryboard Storyboard="{StaticResource Timeline1}"/>
  155.                 </Trigger.EnterActions>
  156.                 <Trigger.ExitActions>
  157.                     <BeginStoryboard x:Name="Timeline2_BeginStoryboard" Storyboard="{StaticResource Timeline2}"/>
  158.                 </Trigger.ExitActions>
  159.             </Trigger>
  160.             <Trigger Property="IsRadioChecked" Value="True">
  161.                 <Setter Property="Content" Value="{Binding Path=TickContentText}" />
  162.                 <Setter TargetName="view2"
  163.                             Property="Visibility"
  164.                             Value="Collapsed" />
  165.                 <Setter TargetName="path"
  166.                             Property="Style"
  167.                             Value="{StaticResource TickPathStyle}" />
  168.             </Trigger>
  169.             
  170.             <Trigger Property="IsRadioChecked" Value="False">
  171.                 <!--<Setter TargetName="contentPresenter" Property="Content" Value="{Binding Path=CrossContentText}" />-->
  172.                                 <Setter Property="Content" Value="{Binding Path=CrossContentText}" />
  173.             </Trigger>
  174.  
  175.             <Trigger Property="IsRadioChecked" Value="{x:Null}">
  176.                 <Setter Property="Content" Value="{Binding Path=ProgressContentText}" />
  177.                 <Setter TargetName="view2"
  178.                             Property="Visibility"
  179.                             Value="Visible" />
  180.                 <Setter TargetName="view1"
  181.                             Property="Visibility"
  182.                             Value="Collapsed" />
  183.             </Trigger>
  184.             <!--<EventTrigger RoutedEvent="FrameworkElement.Loaded">
  185.                 <BeginStoryboard Storyboard="{StaticResource OnLoaded1}"/>
  186.             </EventTrigger>-->
  187.         </ControlTemplate.Triggers>
  188.     </ControlTemplate>
  189.  
  190.     <Style TargetType="{x:Type local:GlassRadioControl}">
  191.         <Setter Property="Template" Value="{StaticResource GlassRadioTemplate}"/>
  192.     </Style>
  193.     
  194.     <!--<Style TargetType="{x:Type local:GlassRadioControl}">
  195.         <Setter Property="Template">
  196.             <Setter.Value>
  197.                 <ControlTemplate TargetType="{x:Type local:GlassRadioControl}">
  198.                     <Border Background="{TemplateBinding Background}"
  199.                             BorderBrush="{TemplateBinding BorderBrush}"
  200.                             BorderThickness="{TemplateBinding BorderThickness}">
  201.                     </Border>
  202.                 </ControlTemplate>
  203.             </Setter.Value>
  204.         </Setter>
  205.     </Style>-->
  206. </ResourceDictionary>

 Figure-7

In this Custom Control, GlassRadioControl, there are three things noticeable. If you look at the XAML (Figure-7), I have created three styles for the paths and referred them under the ControlTemplate section of the Generic.xaml, resource dictionary under. The Control Template’s Resource section contains the animation logic for the circular motion of the Arrow. Also I took advantage of Triggers in the Control Template to obtain the Conditional Logic for the control, like when it is selected, a Border will be drawn etc.
And here is the Code behind for it. If you look at the code, we defined IsRadioChecked Dependency Property, that is responsible for states, like running or error states or so while LeftColumnWidth and RightColumnWidth Dependency properties are responsible for Setting the Left and Right Width of the Split sections. Also you can set the Ticked Content using TickContentText Property, CrossContentText Property when it sees an Error state as well as the ProgressContentText property for showing the running state.

Code Snippet
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Windows.Media.Animation;
  15.  
  16. namespace WpfTestApp
  17. {
  18.     /// <summary>
  19.     /// Follow steps 1a or 1b and then 2 to use this custom control in a XAML file.
  20.     ///
  21.     /// Step 1a) Using this custom control in a XAML file that exists in the current project.
  22.     /// Add this XmlNamespace attribute to the root element of the markup file where it is
  23.     /// to be used:
  24.     ///
  25.     ///     xmlns:MyNamespace="clr-namespace:WpfTestApp"
  26.     ///
  27.     ///
  28.     /// Step 1b) Using this custom control in a XAML file that exists in a different project.
  29.     /// Add this XmlNamespace attribute to the root element of the markup file where it is
  30.     /// to be used:
  31.     ///
  32.     ///     xmlns:MyNamespace="clr-namespace:WpfTestApp;assembly=WpfTestApp"
  33.     ///
  34.     /// You will also need to add a project reference from the project where the XAML file lives
  35.     /// to this project and Rebuild to avoid compilation errors:
  36.     ///
  37.     ///     Right click on the target project in the Solution Explorer and
  38.     ///     "Add Reference"->"Projects"->[Browse to and select this project]
  39.     ///
  40.     ///
  41.     /// Step 2)
  42.     /// Go ahead and use your control in the XAML file.
  43.     ///
  44.     ///     <MyNamespace:GlassRadioControl/>
  45.     ///
  46.     /// </summary>
  47.     public partial class GlassRadioControl : RadioButton
  48.     {
  49.         static GlassRadioControl()
  50.         {
  51.             try
  52.             {
  53.                 DefaultStyleKeyProperty.OverrideMetadata(typeof(GlassRadioControl),
  54.                     new FrameworkPropertyMetadata(typeof(GlassRadioControl)));
  55.             }
  56.             catch
  57.             {
  58.  
  59.             }
  60.         }
  61.  
  62.         public static readonly DependencyProperty IsRadioCheckedProperty = DependencyProperty.Register("IsRadioChecked",
  63.             typeof(bool?),
  64.             typeof(GlassRadioControl),
  65.             new FrameworkPropertyMetadata(true,
  66.             new PropertyChangedCallback(RadioCheckedPropertyChangedCallBack)));
  67.  
  68.         public bool? IsRadioChecked
  69.         {
  70.             get { return (bool?)GetValue(IsRadioCheckedProperty); }
  71.             set { SetValue(IsRadioCheckedProperty, value); }
  72.         }
  73.  
  74.         static void RadioCheckedPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  75.         {
  76.  
  77.         }
  78.  
  79.         public static readonly DependencyProperty LeftColumnWidthProperty = DependencyProperty.Register("LeftColumnWidth",
  80.             typeof(GridLength),
  81.             typeof(GlassRadioControl),
  82.             new FrameworkPropertyMetadata(new GridLength(0.25, GridUnitType.Auto),
  83.             new PropertyChangedCallback(LeftColumnWidthPropertyChangedCallBack)));
  84.  
  85.         public GridLength LeftColumnWidth
  86.         {
  87.             get { return (GridLength)GetValue(LeftColumnWidthProperty); }
  88.             set { SetValue(LeftColumnWidthProperty, value); }
  89.         }
  90.  
  91.         static void LeftColumnWidthPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  92.         {
  93.         }
  94.  
  95.         public static readonly DependencyProperty RightColumnWidthProperty = DependencyProperty.Register("RightColumnWidth",
  96.              typeof(GridLength),
  97.              typeof(GlassRadioControl),
  98.              new FrameworkPropertyMetadata(new GridLength(0.25, GridUnitType.Auto),
  99.              new PropertyChangedCallback(RightColumnWidthPropertyChangedCallBack)));
  100.  
  101.         public GridLength RightColumnWidth
  102.         {
  103.             get { return (GridLength)GetValue(RightColumnWidthProperty); }
  104.             set { SetValue(RightColumnWidthProperty, value); }
  105.         }
  106.  
  107.  
  108.         static void RightColumnWidthPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  109.         {
  110.         }
  111.  
  112.         public static readonly DependencyProperty TickContentTextProperty = DependencyProperty.Register("TickContentText",
  113.             typeof(string),
  114.             typeof(GlassRadioControl),
  115.             new FrameworkPropertyMetadata("Run",
  116.             new PropertyChangedCallback(TickContentTextPropertyChangedCallBack)));
  117.  
  118.         public string TickContentText
  119.         {
  120.             get { return (string)GetValue(TickContentTextProperty); }
  121.             set { SetValue(TickContentTextProperty, value); }
  122.         }
  123.  
  124.         static void TickContentTextPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  125.         {
  126.         }
  127.  
  128.         public static readonly DependencyProperty CrossContentTextProperty = DependencyProperty.Register("CrossContentText",
  129.             typeof(string),
  130.             typeof(GlassRadioControl),
  131.             new FrameworkPropertyMetadata("Error",
  132.             new PropertyChangedCallback(CrossContentTextPropertyChangedCallBack)));
  133.  
  134.         public string CrossContentText
  135.         {
  136.             get { return (string)GetValue(CrossContentTextProperty); }
  137.             set { SetValue(CrossContentTextProperty, value); }
  138.         }
  139.  
  140.         static void CrossContentTextPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  141.         {
  142.         }
  143.  
  144.         public static readonly DependencyProperty ProgressContentTextProperty = DependencyProperty.Register("ProgressContentText",
  145.             typeof(string),
  146.             typeof(GlassRadioControl),
  147.             new FrameworkPropertyMetadata("Runing",
  148.             new PropertyChangedCallback(ProgressContentTextPropertyChangedCallBack)));
  149.  
  150.         public string ProgressContentText
  151.         {
  152.             get { return (string)GetValue(ProgressContentTextProperty); }
  153.             set { SetValue(ProgressContentTextProperty, value); }
  154.         }
  155.  
  156.         static void ProgressContentTextPropertyChangedCallBack(DependencyObject property, DependencyPropertyChangedEventArgs args)
  157.         {
  158.         }
  159.  
  160.         public GlassRadioControl()
  161.         {
  162.             // this is important if you want to bind the properties in the triggers or so...
  163.             this.DataContext = this;
  164.         }
  165.  
  166.         public override void OnApplyTemplate()
  167.         {
  168.             base.OnApplyTemplate();
  169.  
  170.             Storyboard storyboard = (Storyboard)this.Template.Resources["OnLoaded1"];
  171.             storyboard.Begin(this, this.Template);
  172.         }
  173.  
  174.     }
  175. }

 Figure-8

Once this Custom Control is developed, you may reuse it over and over and again and again, as you can see Lines 36-38, Figure-3.
Now, the purpose of the test application is to show you how we consume both Custom Controls and User Controls and how they can be reused and customized for our needs. Here is the final output for it:

image

 Figure-9

That's all for now, I’ll elaborate the concept of custom controls in a more like a tutorial, when I cover the Control Templates in context to Another Reusability Factor i.e Styling, Themes and Skinning  , So stay tuned. Enjoy :)

Download File - Sample Project

If you enjoyed reading this blog, leave your valuable feedback and consider subscribing to the RSS feed. You can also subscribe to it by email. Also, you can follow me on Twitter. Thank you!

Technorati Tags: ,,

Comments (7) -

Fortunately in our society now it is acceptable that people will probably change careers and jobs two or three times before they finally find something that they revel in, something that they are good at and so are thrilled to show up to days a week. Make any final announcements (by way of example, the next webinar inside a series).  Roughly equal amounts with the three primary colors give rise for the perception of white.

fifa 18 coins
10/11/2017 3:45:41 AM #

What's up, this weekend is fastidious in support of me, because this point in time i am reading this wonderful educational paragraph here at my residence.

rencontrer un transexuel
10/11/2017 9:23:27 AM #

rencontre cougar dijon  site de rencontre juif gratuit - www.franck.space/...de-rencontre-juif-gratuit.html  belle phrase pour nouvelle rencontre  site de rencontre motard harley - www.franck.space/...e-rencontre-motard-harley.html  bon coin rencontre  rencontres gay gironde - www.franck.space/rencontres-gay-gironde.html  site de rencontre payant pour homme et femme  balou site de rencontre - www.franck.space/balou-site-de-rencontre.html  le premier rencontre d'amour  rencontre femme russe photo - www.franck.space/rencontre-femme-russe-photo.html  site de rencontre special antillais  rencontres porno - https://www.franck.space/rencontres-porno.html  rencontre cambodge  rencontre sodomie - https://www.franck.space/rencontre-sodomie.html  rencontre gard  rencontre et racines - https://www.franck.space/rencontre-et-racines.html  la lande de la rencontre  rennes rencontres amicales - www.franck.space/rennes-rencontres-amicales.html  application pour faire des rencontres amicales  pourquoi je ne rencontre pas l amour - www.franck.space/...-ne-rencontre-pas-l-amour.html  site rencontre a lyon  site de rencontre handicap - www.franck.space/site-de-rencontre-handicap.html  rencontre sexuelle  rencontrer homme - https://www.franck.space/rencontrer-homme.html  annonce rencontre ephemere  rencontre gode ceinture - www.franck.space/rencontre-gode-ceinture.html  rencontres sexe biarritz  amitie et rencontre savoie - www.franck.space/amitie-et-rencontre-savoie.html  rencontre hommes et femmes avec weemove  rencontre snap - https://www.franck.space/rencontre-snap.html  section rencontres sur badoo  application android pour se faire des amis - www.franck.space/...id-pour-se-faire-des-amis.html  rencontre femme je contacte  rencontres hommes americains - www.franck.space/rencontres-hommes-americains.html  paruvendu 42 rencontre  rencontres bbw - https://www.franck.space/rencontres-bbw.html  site de rencontre pour couple  rencontre meeting gratuit - www.franck.space/rencontre-meeting-gratuit.html  rencontre sourds amis  pouvons nous nous rencontrer - www.franck.space/pouvons-nous-nous-rencontrer.html  rencontres pour adolescent  rencontres coquine gratuit - www.franck.space/rencontres-coquine-gratuit.html  site de rencontres amicales entre femmes  rencontres finistere - https://www.franck.space/rencontres-finistere.html  annonce gay rencontre  rencontres arles billeterie - www.franck.space/rencontres-arles-billeterie.html  site de rencontre gratuit pour handicape  site rencontre var gratuit - www.franck.space/site-rencontre-var-gratuit.html  rencontres hommes americains  dialogue rencontre gratuit - www.franck.space/dialogue-rencontre-gratuit.html   Also visit my page -  rencontrer un transexuel - www.franck.space/rencontrer-un-transexuel.html

rencontre cougar gratuit
10/11/2017 10:28:27 AM #

site de rencontre entierement gratuit pour senior  rencontre japonaise lille - www.dorian.club/rencontre-japonaise-lille.html  rencontre amicale vendee  site de rencontre gratuit parents celibataires - www.dorian.club/...atuit-parents-celibataires.html  paruvendu 973 rencontre  mamba rencontre avis - https://www.dorian.club/mamba-rencontre-avis.html  on se voir quand  rencontres coquines rouen - www.dorian.club/rencontres-coquines-rouen.html  site de  rencontre cougar gratuit - www.dorian.club/rencontre-cougar-gratuit.html  avec ukrainienne  site de rencontre dordogne - www.dorian.club/site-de-rencontre-dordogne.html  chat land rencontre  rencontre gps - https://www.dorian.club/rencontre-gps.html  site de rencontre liverpool  rencontres poitiers - https://www.dorian.club/rencontres-poitiers.html  site de rencontre montreal pour ado  test elite rencontre - https://www.dorian.club/test-elite-rencontre.html  site de rencontre montreal nord  cite de rencontre pour ado - www.dorian.club/cite-de-rencontre-pour-ado.html  rencontre seclin  rencontre etranger - https://www.dorian.club/rencontre-etranger.html  comment rencontrer cristiano ronaldo  rencontre seniors gers - www.dorian.club/rencontre-seniors-gers.html  site de rencontre dominatrice  site de rencontre xxx gratuit - www.dorian.club/site-de-rencontre-xxx-gratuit.html  cafe rencontre gatineau  rencontres amitie 29 - https://www.dorian.club/rencontres-amitie-29.html  rencontre punk rock  rencontres celibataires golf - www.dorian.club/rencontres-celibataires-golf.html  rencontres amicales seniors paris  je les ai rencontre conjugaison - www.dorian.club/...s-ai-rencontre-conjugaison.html  rencontres alsace  profil site de rencontre - www.dorian.club/profil-site-de-rencontre.html  site de rencontre entierement gratuit pour les hommes  site de rencontres gratuit 100 - www.dorian.club/...-de-rencontres-gratuit-100.html  site de rencontre cocoon  rencontre faure fabre - https://www.dorian.club/rencontre-faure-fabre.html  rencontre sexe en vendee  une certaine rencontre allocine - www.dorian.club/...ertaine-rencontre-allocine.html  transexuel rencontre  rencontres celibataires gap - www.dorian.club/rencontres-celibataires-gap.html  rencontre motard celibataire  site de rencontre amicale bretagne - www.dorian.club/...rencontre-amicale-bretagne.html  site rencontre pour handicapes  petites annonces rencontres gratuites - www.dorian.club/...onces-rencontres-gratuites.html  tinder rencontre  sites de rencontre coquin - www.dorian.club/sites-de-rencontre-coquin.html  site de rencontre pour bresilien  sondage site de rencontre - www.dorian.club/sondage-site-de-rencontre.html  comparatif rencontres toutpourserencontrer  rencontre ephemere lyon - www.dorian.club/rencontre-ephemere-lyon.html

j'aimerais vous rencontrer??
10/11/2017 5:30:33 PM #

rencontre sexe brest  rencontre homme indien - www.clemence.space/rencontre-homme-indien.html  site de rencontre des femmes canadiennes gratuit  chat nrj rencontre gratuit - www.clemence.space/chat-nrj-rencontre-gratuit.html  site rencontre cougars  site de rencontre gratuit suisse - www.clemence.space/...encontre-gratuit-suisse.html  rencontre avec des femme sourde  sites rencontre - https://www.clemence.space/sites-rencontre.html  app rencontre gratuit  site de rencontre international en ligne gratuit - www.clemence.space/...tional-en-ligne-gratuit.html  rencontre entre fille et garcon  la rencontre livre de allan w eckert - www.clemence.space/...livre-de-allan-w-eckert.html  rencontre femme poitiers  rencontrer le grand amour a 40 ans - www.clemence.space/...le-grand-amour-a-40-ans.html  site de rencontre premium  rencontre cougar dijon - www.clemence.space/rencontre-cougar-dijon.html  site de rencontre telephonique gratuit  application rencontre japonaise - www.clemence.space/...ion-rencontre-japonaise.html  forum rencontre gratuit  voo app rencontre - https://www.clemence.space/voo-app-rencontre.html  comment rencontrer un mec de 13 ans  site de rencontre de cul gratuit - www.clemence.space/...encontre-de-cul-gratuit.html  comment faire pour creer un site de rencontre  rencontre coquines gratuites - www.clemence.space/...ntre-coquines-gratuites.html  site de rencontre pour personne handicape  rencontre avec le dragon imdb - www.clemence.space/...tre-avec-le-dragon-imdb.html  rencontre psg real  rencontre entre ado emo - www.clemence.space/rencontre-entre-ado-emo.html  rencontre juive gratuite  site de rencontre pour femme en couple - www.clemence.space/...re-pour-femme-en-couple.html  premiere rencontre avec un homme taureau  lotus rencontre - https://www.clemence.space/lotus-rencontre.html  sites de rencontre payants  comment savoir si mon ex a rencontre quelqu'un - www.clemence.space/...ex-a-rencontre-quelquun.html  arles rencontres  rencontre une femme russe gratuit - www.clemence.space/...une-femme-russe-gratuit.html  site de rencontre japonais  rencontre en terre inconnu - www.clemence.space/rencontre-en-terre-inconnu.html  rencontre hot  sites de rencontre gratuit pour femmes - www.clemence.space/...tre-gratuit-pour-femmes.html  site de rencontre 10 - 13 ans  site de rencontre homme dubai - www.clemence.space/...e-rencontre-homme-dubai.html  rencontre homme black  rencontres lorient - https://www.clemence.space/rencontres-lorient.html  maison de la rencontre collonges au mont d'or  rencontrer le grand amour a 40 ans - www.clemence.space/...le-grand-amour-a-40-ans.html  site rencontre facebook application  que pensez vous du site de rencontre oulfa - www.clemence.space/...site-de-rencontre-oulfa.html  rencontre coquine en bretagne  rencontre amicale millau - www.clemence.space/rencontre-amicale-millau.html   Visit my page -  j'aimerais vous rencontrer?? - www.clemence.space/jaimerais-vous-rencontrer.html

devis peinture maison 150m2
10/12/2017 2:39:51 PM #

parquet bambou salle de bain prix  renover une cuisine en bois - www.celia.space/renover-une-cuisine-en-bois.html  tarif pose lino leroy merlin  habillage escalier pierre - www.celia.space/habillage-escalier-pierre.html  cout abattre mur non porteur  comment renover une salle de bain a petit prix - www.celia.space/...salle-de-bain-a-petit-prix.html  prix poele a pellet jotul  termites traitement cout - www.celia.space/termites-traitement-cout.html  prix motorisation portail somfy evolvia 400  devis peinture maison 110 m2 - www.celia.space/devis-peinture-maison-110-m2.html  devis climatiseur gratuit  devis plombier salle de bain - www.celia.space/devis-plombier-salle-de-bain.html  climatisation reversible prix leroy merlin  poele a bois central suspendu prix - www.celia.space/...bois-central-suspendu-prix.html  poele a granules mcz prix  prix volets battants pvc castorama - www.celia.space/...ets-battants-pvc-castorama.html  installation main courante escalier interieur  portail electrique coulissant prix moyen - www.celia.space/...ique-coulissant-prix-moyen.html  devis electricite  prix cloture rigide avec soubassement - www.celia.space/...e-rigide-avec-soubassement.html  poele a granule canalisable 12 kw prix  volet pvc couleur bois prix - www.celia.space/volet-pvc-couleur-bois-prix.html  couverture de survie pharmacie prix  creation toiture prix - https://www.celia.space/creation-toiture-prix.html  grillage a moutons prix  prix d'un escalier tournant en bois - www.celia.space/...-escalier-tournant-en-bois.html  renover cuisine formica  aspirateur centralise husky prix - www.celia.space/...teur-centralise-husky-prix.html  devis panneaux publicitaires  prix porte d'entree bois lapeyre - www.celia.space/...porte-dentree-bois-lapeyre.html  cloture grillage rigide prix usine  diagnostic immobilier vente prix - www.celia.space/...stic-immobilier-vente-prix.html  renovation de salle de bains  estimation cout travaux renovation maison - www.celia.space/...-travaux-renovation-maison.html   devis peinture maison 150m2 - www.celia.space/devis-peinture-maison-150m2.html  abri telescopique  devis travaux renovation appartement paris - www.celia.space/...novation-appartement-paris.html  prix isolation exterieur maison 140m2  prix m2 crepis exterieur maison - www.celia.space/...m2-crepis-exterieur-maison.html  prix portail coulissant electrique pvc  cheminee suspendue moderne prix - www.celia.space/...nee-suspendue-moderne-prix.html  prix baie vitree 6 metres  prix placard sous escalier - www.celia.space/prix-placard-sous-escalier.html  wc suspendu grohe rapid sl prix  resine sol interieur maison prix - www.celia.space/...-sol-interieur-maison-prix.html  volet battant persienne bois prix  cout pour demolir un mur porteur - www.celia.space/...our-demolir-un-mur-porteur.html  prix poele a pellets piazzetta  travaux effectues sans devis accepte - www.celia.space/...fectues-sans-devis-accepte.html  parquet bambou salle de bain prix  renover salle de bain moindre cout - www.celia.space/...salle-de-bain-moindre-cout.html

presbytie traitement implant
10/12/2017 6:31:18 PM #

laser hypermetropie presbytie  synonyme de myope - https://www.benoit.space/synonyme-de-myope.html  operation yeux hypermetrope astigmate  prix operation myopie laser - www.benoit.space/prix-operation-myopie-laser.html  remboursement secu chirurgie de la myopie  l'oeil myope au repos - https://www.benoit.space/loeil-myope-au-repos.html  myopie ou hypermetropie  guerir de la myopie sans operation - www.benoit.space/...-la-myopie-sans-operation.html  lentille pour myope astigmate presbyte  devenir myope a 50 ans - www.benoit.space/devenir-myope-a-50-ans.html  lentille correction myopie nuit  operation myopie - https://www.benoit.space/operation-myopie.html  quest ce qu'etre astigmate  tarif pour operation de la presbytie - www.benoit.space/...operation-de-la-presbytie.html  operation presbytie laser dijon  devenir myope - https://www.benoit.space/devenir-myope.html  lentilles correction myopie et presbytie  l hypermetropie - https://www.benoit.space/l-hypermetropie.html  harmonie mutuelle operation myopie  myope presbyte et astigmate - www.benoit.space/myope-presbyte-et-astigmate.html  operation presbytie lyon  harmonie mutuelle operation myopie - www.benoit.space/...mutuelle-operation-myopie.html  operation de la myopie au laser tarif  lentilles astigmates couleur - www.benoit.space/lentilles-astigmates-couleur.html  operation des yeux prix montpellier  lentille de nuit pour correction myopie - www.benoit.space/...it-pour-correction-myopie.html  remboursement operation myopie ag2r  myope presbyte - https://www.benoit.space/myope-presbyte.html  operation myopie presbytie  vision floue apres operation hypermetropie - www.benoit.space/...s-operation-hypermetropie.html  definition presbytie  vue myopie presbytie - https://www.benoit.space/vue-myopie-presbytie.html  operation des yeux presbytie  comment mesure-t-on la myopie - www.benoit.space/...ent-mesure-t-on-la-myopie.html  operation laser myopie prix lyon  myopie 8 dioptries - https://www.benoit.space/myopie-8-dioptries.html  myopie fatigue generale  definition myopie - https://www.benoit.space/definition-myopie.html  presbytie laser lyon  lentilles presbytie myopie - www.benoit.space/lentilles-presbytie-myopie.html   presbytie traitement implant - www.benoit.space/presbytie-traitement-implant.html  et lentilles de couleur  operation yeux hypermetropie tarif - www.benoit.space/...-yeux-hypermetropie-tarif.html  astigmate definition wikipedia  operation laser grenoble - www.benoit.space/operation-laser-grenoble.html  correction myopie 0.25  opinion club de cuervos - www.benoit.space/opinion-club-de-cuervos.html  tarif chirurgie myopie laser  operation myopie vue baisse - www.benoit.space/operation-myopie-vue-baisse.html  hyperopia medical terminology  myope vision de loin - https://www.benoit.space/myope-vision-de-loin.html

rencontre femme dordogne
10/12/2017 7:04:03 PM #

site de rencontres amicales entre femmes  rencontre femme d'un jour gratuit - www.aurelie.club/...re-femme-dun-jour-gratuit.html  rencontre annonay  rencontre celibataire juif paris - www.aurelie.club/...re-celibataire-juif-paris.html  skype rencontres  site de rencontre pour ado de 12 a 16 ans - www.aurelie.club/...e-pour-ado-de-12-a-16-ans.html  site de rencontre extraconjugal gratuit pour les hommes  rencontre sexe lesbienne - www.aurelie.club/rencontre-sexe-lesbienne.html  rendez vous site rencontre  rencontre roanne - https://www.aurelie.club/rencontre-roanne.html  site de rencontre entre femme  site de rencontre gratuit via mobile - www.aurelie.club/...contre-gratuit-via-mobile.html  rencontres 62130  site rencontre selectif - www.aurelie.club/site-rencontre-selectif.html  site pour rencontrer des gens du monde entier  site de rencontre cocody - www.aurelie.club/site-de-rencontre-cocody.html  site de rencontre dialogue  site rencontre non payant gratuit - www.aurelie.club/...contre-non-payant-gratuit.html  rencontre femme estonie  rencontre annuelle - https://www.aurelie.club/rencontre-annuelle.html  app de rencontre usa  nrj 12 site de rencontre - www.aurelie.club/nrj-12-site-de-rencontre.html  site rencontres gratuit avis  rencontre avenue test - www.aurelie.club/rencontre-avenue-test.html  site de rencontre ukrainienne  exemple d'annonce site de rencontre - www.aurelie.club/...annonce-site-de-rencontre.html  msn rencontre  site de rencontre tilt - www.aurelie.club/site-de-rencontre-tilt.html  rencontre libre  rencontre rennes - https://www.aurelie.club/rencontre-rennes.html  site de rencontre russe photo  amour rencontre gratuit - www.aurelie.club/amour-rencontre-gratuit.html  rencontre autour de moi  tous les sites de rencontres gratuits - www.aurelie.club/...es-de-rencontres-gratuits.html  ado rencontre bordeaux  site rencontre grenoble - www.aurelie.club/site-rencontre-grenoble.html  rencontre gratuit monde entier  rencontre gay limoges - www.aurelie.club/rencontre-gay-limoges.html  site rencontre fille  site de rencontre sans aucun paiement - www.aurelie.club/...ontre-sans-aucun-paiement.html  site de rencontre par geolocalisation  rencontre femme dordogne - www.aurelie.club/rencontre-femme-dordogne.html  site de rencontres avis  elite rencontre se desinscrire - www.aurelie.club/...-rencontre-se-desinscrire.html  rencontres amicales caen  forum site de rencontre gratuit - www.aurelie.club/...site-de-rencontre-gratuit.html  rencontre 49160  agence de rencontres toulouse - www.aurelie.club/...ce-de-rencontres-toulouse.html  rencontres femmes juives  rencontre 17500 - https://www.aurelie.club/rencontre-17500.html

hypermetropie operation age
10/13/2017 12:27:54 AM #

corriger la presbytie par des exercices  quelle lentille pour hypermetrope - www.coline.club/...lentille-pour-hypermetrope.html  correction  hypermetropie operation age - www.coline.club/hypermetropie-operation-age.html  presbytie  application gratuite pour corriger la presbytie - www.coline.club/...pour-corriger-la-presbytie.html  hypermetropie lentille convergente  yeux fatigues astigmate - www.coline.club/yeux-fatigues-astigmate.html  definition mot presbyte  operation myopie lyon avis - www.coline.club/operation-myopie-lyon-avis.html  chirurgie laser myopie presbytie  operation myopie astigmatie risques - www.coline.club/...-myopie-astigmatie-risques.html  correction myopie laser  chirurgie myopie lyon edouard herriot - www.coline.club/...yopie-lyon-edouard-herriot.html  operation myopie presbytie laser  hypermetropie faible - https://www.coline.club/hypermetropie-faible.html  operation myopie prix toulouse  verre astigmate - https://www.coline.club/verre-astigmate.html  exercices pour soigner la myopie  operation myopie paris quinze vingt - www.coline.club/...-myopie-paris-quinze-vingt.html  remboursement securite sociale myopie laser  laser myopie astigmatie - www.coline.club/laser-myopie-astigmatie.html  lentilles pour presbytes  mutuelle generation operation myopie - www.coline.club/...eneration-operation-myopie.html  traitement chirurgical de la myopie  operation laser presbytie prix - www.coline.club/...ation-laser-presbytie-prix.html  operation myopie avis  operation laser hypermetropie strabisme - www.coline.club/...er-hypermetropie-strabisme.html  oeil hypermetrope punctum proximum  lentille souple astigmate myope - www.coline.club/...lle-souple-astigmate-myope.html  sur correction myopie lasik  age debut presbytie - https://www.coline.club/age-debut-presbytie.html  la myopie est hereditaire  deux causes de la myopie - www.coline.club/deux-causes-de-la-myopie.html  correction hypermetropie presbytie  lentilles couleur astigmate myope - www.coline.club/...es-couleur-astigmate-myope.html  operation laser cicatrice visage  laser myopie dioptrie - https://www.coline.club/laser-myopie-dioptrie.html  operation presbytie cout  operation myopie grenoble - www.coline.club/operation-myopie-grenoble.html  correction myopie laser prix  implant yeux myopie - https://www.coline.club/implant-yeux-myopie.html  operation laser yeux myopie  chirurgie yeux laser douleur - www.coline.club/chirurgie-yeux-laser-douleur.html  operation laser astigmatie avis  operation yeux myopie bordeaux - www.coline.club/...ation-yeux-myopie-bordeaux.html  myopie evolutive 40 ans  traitement alternatif de la presbytie - www.coline.club/...alternatif-de-la-presbytie.html  lentille hypermetrope+presbyte  operation myopie remboursement pro btp - www.coline.club/...opie-remboursement-pro-btp.html  lentille de couleur astigmate et myope  hypermetropie hereditaire - www.coline.club/hypermetropie-hereditaire.html

dressing lapeyre prix
10/13/2017 2:40:30 AM #

tarif maison ossature bois 100m2  devis installation porte blindee - www.emilie.club/...installation-porte-blindee.html  ouverture porte mur porteur prix  cout remplacement toiture eternit - www.emilie.club/...mplacement-toiture-eternit.html  renover un parquet vitrifie raye  prix baie vitree coulissante pvc - www.emilie.club/...aie-vitree-coulissante-pvc.html  deratisation prix  devis renovation maison pierre - www.emilie.club/...s-renovation-maison-pierre.html  veranda bois kit prix  prix surelevation maison phenix - www.emilie.club/...surelevation-maison-phenix.html  beton cire sol exterieur prix  devis plombier lyon - https://www.emilie.club/devis-plombier-lyon.html  garde corps terrasse prix discount  devis porte pvc en ligne - www.emilie.club/devis-porte-pvc-en-ligne.html  devis garde corps en ligne  prix moyen raccordement assainissement collectif - www.emilie.club/...t-assainissement-collectif.html  renovation maison liege  baie coulissante sur mesure devis en ligne - www.emilie.club/...-sur-mesure-devis-en-ligne.html  prix cloture grillage mouton  installation electrique courant faible - www.emilie.club/...-electrique-courant-faible.html  prix placard coulissant sous escalier  prix veranda rideau icone - www.emilie.club/prix-veranda-rideau-icone.html  prix renovation appartement 65 m2  tarif poele a bois leroy merlin - www.emilie.club/...-poele-a-bois-leroy-merlin.html  devis en ligne portillon  prix moyen maison neuve en bois - www.emilie.club/...moyen-maison-neuve-en-bois.html  installation moteur portail coulissant nice  wc japonais saniclean prix - www.emilie.club/wc-japonais-saniclean-prix.html  prix cloture rigide nord  prix engazonnement par projection - www.emilie.club/...gazonnement-par-projection.html  cheminee contemporaine bois prix  devis appartement peinture - www.emilie.club/devis-appartement-peinture.html  prix pergola bioclimatique monsieur store  prix ascenseur prive maison - www.emilie.club/prix-ascenseur-prive-maison.html  extension veranda prix m2  devis installation solaire thermique - www.emilie.club/...allation-solaire-thermique.html  abri piscine terrasse coulissante prix  prix portail coulissant pvc 4m - www.emilie.club/...-portail-coulissant-pvc-4m.html  faire un devis electricite en ligne  prix tuyau pvc 100 sable - www.emilie.club/prix-tuyau-pvc-100-sable.html  prix cloture rigide castorama  devis maconnerie maison 100m2 - www.emilie.club/devis-maconnerie-maison-100m2.html  cout renovation maison 150 m2  prix poele a bois invicta orense - www.emilie.club/...oele-a-bois-invicta-orense.html  prix terrassement maison 100m2  tarif revetement sol exterieur - www.emilie.club/...f-revetement-sol-exterieur.html   dressing lapeyre prix - https://www.emilie.club/dressing-lapeyre-prix.html  bac acier isole imitation tuile  prix du spasfon lyoc en pharmacie - www.emilie.club/...-spasfon-lyoc-en-pharmacie.html  prix renovation maison 60m2  porte automatique coulissante 1 vantail prix - www.emilie.club/...coulissante-1-vantail-prix.html

operation presbytie laser bordeaux  prix operation des yeux presbytie - www.benoit.space/...ration-des-yeux-presbytie.html  operation de la myopie est elle remboursee  tarif operation myopie fondation rothschild - www.benoit.space/...opie-fondation-rothschild.html  prix chirurgie myopie toulouse  lentille myopie hypermetropie - www.benoit.space/...ille-myopie-hypermetropie.html  operation myopie risques long terme  myope peut devenir aveugle - www.benoit.space/myope-peut-devenir-aveugle.html  lentille pour hypermetrope presbyte  lentilles astigmate - https://www.benoit.space/lentilles-astigmate.html  traitement laser presbytie lyon  chirurgie laser myopie strasbourg - www.benoit.space/...e-laser-myopie-strasbourg.html  application presbytie glassesoff  operation hypermetropie astigmatie prix - www.benoit.space/...rmetropie-astigmatie-prix.html  maquillage des yeux  comment faire pour ameliorer sa myopie - www.benoit.space/...-pour-ameliorer-sa-myopie.html  les myopes  hypermetrope def - https://www.benoit.space/hypermetrope-def.html  operation yeux myopie et presbytie  myopinion club - https://www.benoit.space/myopinion-club.html  myopie cause  chirurgie laser cicatrice toulouse - www.benoit.space/...-laser-cicatrice-toulouse.html  guerir la myopie sans operation  centre laser myopie lyon - www.benoit.space/centre-laser-myopie-lyon.html  operation laser presbytie  operation presbytie laser bordeaux - www.benoit.space/...-presbytie-laser-bordeaux.html  operation myopie grenoble avis  causes environnementale de la myopie - www.benoit.space/...ronnementale-de-la-myopie.html  operation myopie tarif nantes  tarif operation myopie marseille - www.benoit.space/...peration-myopie-marseille.html  myopie quel age  astigmate et hypermetrope laser - www.benoit.space/...ate-et-hypermetrope-laser.html  correction de la vue au laser myopie  operation myopie remboursement - www.benoit.space/...tion-myopie-remboursement.html  prix operation myopie remboursement  presbytie et myopie - https://www.benoit.space/presbytie-et-myopie.html  exercice pour ameliorer myopie  chirurgie laser yeux prix maroc - www.benoit.space/...gie-laser-yeux-prix-maroc.html  lentille pour astigmate et myopie  chirurgie laser yeux credit impot - www.benoit.space/...e-laser-yeux-credit-impot.html  operation yeux myopie risques  operation lasik myopie et presbytie - www.benoit.space/...lasik-myopie-et-presbytie.html  hypermetrope vue de loin  cout d'une chirurgie laser myopie - www.benoit.space/...ne-chirurgie-laser-myopie.html  guerir la myopie sans operation  simulation vue myopie - www.benoit.space/simulation-vue-myopie.html  correction vue laser hypermetropie  prix operation des yeux presbytie - www.benoit.space/...ration-des-yeux-presbytie.html  myopie vision de loin  guerir la myopie naturellement - www.benoit.space/...r-la-myopie-naturellement.html  myopie 9 dioptries  comment y voit un myope - www.benoit.space/comment-y-voit-un-myope.html

devis decoration
10/13/2017 5:24:38 AM #

devis isolation exterieure  devis filtre a sable vertical draine - www.axelle.space/...e-a-sable-vertical-draine.html  toiture bac acier prix m2 pose  devis revision auto norauto - www.axelle.space/devis-revision-auto-norauto.html  prix toiture bac acier isole au m2  prix ravalement facade maison phenix - www.axelle.space/...ment-facade-maison-phenix.html  maison ossature bois prix paca  tarif pour demoussage de toit - www.axelle.space/...f-pour-demoussage-de-toit.html  devis pose wc suspendu  prix porte d'entree renovation - www.axelle.space/...-porte-dentree-renovation.html  prix dressing sur mesure sous pente  aspirateur centralise prix discount - www.axelle.space/...-centralise-prix-discount.html  faux plafond avec led prix  poele a bois installation norme - www.axelle.space/...a-bois-installation-norme.html  devis meubles gain de place  prix motorisation volet roulant solaire - www.axelle.space/...ion-volet-roulant-solaire.html  devis peinture volets exterieur  devis gratuit alarme maison - www.axelle.space/devis-gratuit-alarme-maison.html   devis decoration - https://www.axelle.space/devis-decoration.html  portails  baie coulissante 4 metres prix - www.axelle.space/...coulissante-4-metres-prix.html  spasfon lyoc 80 mg prix  tarif goudronnage gironde - www.axelle.space/tarif-goudronnage-gironde.html  chauffage electrique au sol basse temperature prix  devis insert bois - https://www.axelle.space/devis-insert-bois.html  devis pour travaux appartement  prix construction maison individuelle m2 - www.axelle.space/...on-maison-individuelle-m2.html  devis diagnostic amiante avant travaux  porte pvc sur mesure prix - www.axelle.space/porte-pvc-sur-mesure-prix.html  tarif elagage haie cypres  ascenseur prive interieur prix - www.axelle.space/...seur-prive-interieur-prix.html  prix maconnerie parpaing m2  prix portail coulissant motorise castorama - www.axelle.space/...issant-motorise-castorama.html  renover une table de cuisine en bois  prix maison bois sur mesure - www.axelle.space/prix-maison-bois-sur-mesure.html  prix maison ossature bois kit  cuisine equipee prix - https://www.axelle.space/cuisine-equipee-prix.html  prix baie vitree gris  carrelage pierre de bourgogne prix m2 - www.axelle.space/...erre-de-bourgogne-prix-m2.html  prix terrasse bois forumconstruire  cout extension bois avec etage - www.axelle.space/...extension-bois-avec-etage.html  terrasse bois sur pilotis prix  prix dalle led philips - www.axelle.space/prix-dalle-led-philips.html  adoucisseur d'eau culligan family prix  extension veranda prix m2 - www.axelle.space/extension-veranda-prix-m2.html  renovation toiture fibro ciment toulouse  preau terrasse prix - https://www.axelle.space/preau-terrasse-prix.html  cout d'une renovation totale maison  prix escalier exterieur metal - www.axelle.space/...-escalier-exterieur-metal.html  devis fosse septique nimes  devis decoration mariage - www.axelle.space/devis-decoration-mariage.html

rencontre femme ukraine avis
10/13/2017 5:34:47 AM #

rencontre viva street  rencontrer des gens a paris quand on est timide - www.anne-sophie.space/...-quand-on-est-timide.html  site de rencontre entierement gratuit et fiable  inshallah site de rencontre - www.anne-sophie.space/...ah-site-de-rencontre.html  site de de rencontre  quel activite pour rencontrer des gens - www.anne-sophie.space/...-rencontrer-des-gens.html  endroit rencontre montreal  rencontre sur montpellier - www.anne-sophie.space/...ntre-sur-montpellier.html  site de rencontre gratuit lyon  les site de rencontre gratuit en espagne - www.anne-sophie.space/...e-gratuit-en-espagne.html  les sites de rencontres gratuits canadien  rencontre metisse antillais - www.anne-sophie.space/...re-metisse-antillais.html  ou faire des rencontres  rencontre le petit quevilly - www.anne-sophie.space/...re-le-petit-quevilly.html  comment rencontrer une femme en islam  rencontre bayonne 64 - www.anne-sophie.space/rencontre-bayonne-64.html  app de rencontre gratuite sur iphone  rencontre facetime - www.anne-sophie.space/rencontre-facetime.html  msn rencontres  j'aimerai venir vous voir - www.anne-sophie.space/...erai-venir-vous-voir.html  rencontrer des gens a annecy  rencontres immediates - www.anne-sophie.space/rencontres-immediates.html  site de rencontre pour lesbiennes  elite site de rencontre - www.anne-sophie.space/elite-site-de-rencontre.html  site de rencontre parisien gratuit  marseille rencontres amicales - www.anne-sophie.space/...-rencontres-amicales.html  rencontre transsexuel  rencontres sud ouest - www.anne-sophie.space/rencontres-sud-ouest.html  arnaques sites de rencontre  rencontre trans paca - www.anne-sophie.space/rencontre-trans-paca.html  rencontre femme pays de la loire  rencontre coquine clermont ferrand - www.anne-sophie.space/...ine-clermont-ferrand.html  site de rencontre extra conjugal montreal  les nom des site de rencontre - www.anne-sophie.space/...es-site-de-rencontre.html  sites de rencontre extra conjugales  el mektoub rencontre - www.anne-sophie.space/el-mektoub-rencontre.html  caliceo pau  rencontre femme ukraine avis - www.anne-sophie.space/...e-femme-ukraine-avis.html   rencontre skyrock - www.anne-sophie.space/rencontre-skyrock.html  vous rencontrez  rencontre langres - www.anne-sophie.space/rencontre-langres.html  je l'ai rencontre sur tinder  rencontre gay bordeaux - www.anne-sophie.space/rencontre-gay-bordeaux.html  rencontre sexe paca  site de rencontre avis femme - www.anne-sophie.space/...rencontre-avis-femme.html  rencontre femme lesbienne  site de rencontre celibataire suisse - www.anne-sophie.space/...e-celibataire-suisse.html  rencontre sur le tarn  rencontrer homme coreen - www.anne-sophie.space/rencontrer-homme-coreen.html  transexuelles rencontres  sit rencontre femme - www.anne-sophie.space/sit-rencontre-femme.html

std testing results how long
10/16/2017 1:22:22 PM #

On-line take a look at outcomes can be found 24/7.

Try to find testing sites close to you.

arnaque entreprise photovoltaique
10/16/2017 5:07:52 PM #

arnaque le bon coin mandat cash porter plainte  arnaque m6 boutique voyage - www.aymeric.space/arnaque-m6-boutique-voyage.html  arnaque mail ameli  arnaque sms sosh - https://www.aymeric.space/arnaque-sms-sosh.html  arnaque a la location sur le bon coin  arnaque numericable - https://www.aymeric.space/arnaque-numericable.html  gestionnaire contentieux urssaf  eztrader arnaque - https://www.aymeric.space/eztrader-arnaque.html  arnaque garage peugeot  arnaque a la location de photocopieur - www.aymeric.space/...location-de-photocopieur.html  arnaque location airbnb  arnaque airbnb caution - www.aymeric.space/arnaque-airbnb-caution.html  arnaque sfam 2017  arnaques leboncoin mail - www.aymeric.space/arnaques-leboncoin-mail.html  arnaque abritel new york  litige automobile entre particulier - www.aymeric.space/...mobile-entre-particulier.html  arnaque gdf edf  arnaques leboncoin mail - www.aymeric.space/arnaques-leboncoin-mail.html  les litiges dans le transport  modele de recours contentieux devant le tribunal administratif - www.aymeric.space/...e-tribunal-administratif.html  arnaque credit invest  litige avec une auto ecole a qui s'adresser - www.aymeric.space/...to-ecole-a-qui-sadresser.html  neuilly contentieux marseille  forum arnaques homelidays - www.aymeric.space/forum-arnaques-homelidays.html  arnaque bourse option binaire  le contentieux de pleine juridiction pdf - www.aymeric.space/...e-pleine-juridiction-pdf.html  arnaque bioxyn  arnaque orange s8 - https://www.aymeric.space/arnaque-orange-s8.html  sos  arnaque entreprise photovoltaique - www.aymeric.space/...ntreprise-photovoltaique.html   arnaque vente iphone 6 le bon coin - www.aymeric.space/...nte-iphone-6-le-bon-coin.html  cours de droit du contentieux constitutionnel pdf  remboursement arnaque avec western union - www.aymeric.space/...naque-avec-western-union.html  contentieux credit agricole strasbourg  forum arnaques homelidays - www.aymeric.space/forum-arnaques-homelidays.html  acn arnaque pyramidale  arnaque sentimentale temoignage - www.aymeric.space/...-sentimentale-temoignage.html  litige etat des lieux tribunal  contentieux des affaires definition - www.aymeric.space/...-des-affaires-definition.html  litige mutuelle uneo  arnaque de pret d'argent entre particulier - www.aymeric.space/...argent-entre-particulier.html  trading arnaques  litige automobile entre particulier - www.aymeric.space/...mobile-entre-particulier.html  arnaque assurance vie cnp  site d'arnaque - https://www.aymeric.space/site-darnaque.html  litige client  arnaque au 0899 - https://www.aymeric.space/arnaque-au-0899.html  arnaque loterie microsoft  arnaque photovoltaique solfea - www.aymeric.space/...ue-photovoltaique-solfea.html  arnaque abidjan faux coeur  e-litige maroc - https://www.aymeric.space/e-litige-maroc.html

std testing tempe
10/16/2017 6:30:49 PM #

The only way to really know is to get examined.

12 tarot meaning
10/16/2017 10:29:05 PM #

5 pentacles tarot reversed  tarot reading cardiff market - www.aurelien.club/...t-reading-cardiff-market.html  science themed tarot cards  tarot cards reading methods - www.aurelien.club/tarot-cards-reading-methods.html  carnival tarot cards  tarot de marseille denis lapierre - www.aurelien.club/...marseille-denis-lapierre.html  free online tarot card meanings  ask tarot cards online - www.aurelien.club/ask-tarot-cards-online.html  meaning of tarot cards the sun  ace cups tarot forum - www.aurelien.club/ace-cups-tarot-forum.html  future pregnancy tarot reading  fortune telling tarot spreads - www.aurelien.club/...ne-telling-tarot-spreads.html  australian tarot cards  tarot reading truth spread - www.aurelien.club/tarot-reading-truth-spread.html  world tarot day controversy  tarot cards use and history - www.aurelien.club/tarot-cards-use-and-history.html  tarot layouts future  queen of pentacles love tarot bukisa - www.aurelien.club/...tacles-love-tarot-bukisa.html  tarot card major arcana 11  golden universal tarot cards - www.aurelien.club/...en-universal-tarot-cards.html  tarot rune  tarot cards and their meanings wiki - www.aurelien.club/...-and-their-meanings-wiki.html  the hierophant tarot  ace of wands tarot meaning keen - www.aurelien.club/...wands-tarot-meaning-keen.html  tarot heart spread  zombie tarot card set - www.aurelien.club/zombie-tarot-card-set.html  tarot reading albuquerque  marseille tarot cards - www.aurelien.club/marseille-tarot-cards.html  tarot of the origins toppi  ancient egyptian tarot deck - www.aurelien.club/ancient-egyptian-tarot-deck.html  king of cups love dove tarot  gilded tarot all cards - www.aurelien.club/gilded-tarot-all-cards.html  the tarot  queen of swords tarot work - www.aurelien.club/queen-of-swords-tarot-work.html  tarot phone wallpaper  science tarot cards - https://www.aurelien.club/science-tarot-cards.html  yes and no tarot reading  how to get reversed tarot cards - www.aurelien.club/...get-reversed-tarot-cards.html  mini tarot cards for sale  new golden dawn ritual tarot deck - www.aurelien.club/...n-dawn-ritual-tarot-deck.html  peter answer virtual  12 tarot meaning - https://www.aurelien.club/12-tarot-meaning.html  tagalog  townsend tarot - https://www.aurelien.club/townsend-tarot.html  the mythic tarot card meanings  dave mckean particle tarot - www.aurelien.club/dave-mckean-particle-tarot.html  three of swords meaning in tarot cards  thoth tarot 5 of cups - www.aurelien.club/thoth-tarot-5-of-cups.html  4 of swords as feelings tarot forum  learn tarot cards meanings - www.aurelien.club/learn-tarot-cards-meanings.html  joy dalton tarot  monthly tarot card spread - www.aurelien.club/monthly-tarot-card-spread.html

http://pro-citygroup.com
10/17/2017 4:06:04 AM #

обзор онлайн казино drift азартные игры бесплатно играть сейчас обзор онлайн казино admiral игровые азартные игры

Please name to confirm when testing is on the market.

Add comment