<Window x:Class="ControlTemplates.GradientButtonTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="GradientButtonTest" Height="280" Width="322"
>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="a.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<StackPanel>
<Button Margin="10" Padding="5" Click="Clicked" Name="cmdOne">A Simple Button with a Custom Template</Button>
<Button Margin="10" Padding="5" IsEnabled="False" Click="Clicked" Name="cmdFour" >A Disabled Button</Button>
<CheckBox Margin="10" Checked="chkGreen_Checked" Unchecked="chkGreen_Unchecked">Use Alternate Theme</CheckBox>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace ControlTemplates
{
public partial class GradientButtonTest : System.Windows.Window
{
public GradientButtonTest()
{
InitializeComponent();
}
private void Clicked(object sender, RoutedEventArgs e)
{
MessageBox.Show("You clicked " + ((Button)sender).Name);
}
private void chkGreen_Checked(object sender, RoutedEventArgs e)
{
ResourceDictionary resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri("a.xaml", UriKind.Relative);
this.Resources.MergedDictionaries[0] = resourceDictionary;
}
private void chkGreen_Unchecked(object sender, RoutedEventArgs e)
{
ResourceDictionary resourceDictionary = new ResourceDictionary();
resourceDictionary.Source = new Uri("b.xaml", UriKind.Relative);
this.Resources.MergedDictionaries[0] = resourceDictionary;
}
}
}
Enhance the visual appearance of a ContentControl by applying a style.
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="CodeMapNS"
x:Class="ContentControlSimple.Page1">
<StackPanel>
<StackPanel.Resources>
<Style x:Key="ContentCtrl" TargetType="{x:Type ContentControl}">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="40"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Grid>
<Ellipse Width="{TemplateBinding Width}" Height="{TemplateBinding Width}" Fill="{TemplateBinding Background}"/>
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="template1">
<TextBlock Text="{Binding}" FontSize="12" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
</DataTemplate>
</StackPanel.Resources>
<Label Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="2">
<ContentControl Width="75" Style="{StaticResource ContentCtrl}" Content="Hello"/>
</Label>
<Label Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="3"
Background="Blue">
<ContentControl Name="contCtrl" ContentTemplate="{StaticResource template1}"
Content="This is the content of the content control."/>
</Label>
<Button Name="btn2" Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="4" Background="LightBlue" Click="OnClick">
<TextBlock TextWrapping="Wrap">Click </TextBlock>
</Button>
</StackPanel>
</Canvas>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Data;
using System.Windows.Media;
using System.Collections.ObjectModel;
namespace ContentControlSimple
{
public partial class Page1 : Canvas
{
void OnClick(object sender, RoutedEventArgs e)
{
if (contCtrl.HasContent == true)
{
MessageBox.Show("contCtrl has content");
}
}
}
}
Use a ContentTemplate and determine whether the control contains content.
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="CodeMapNS"
x:Class="ContentControlSimple.Page1">
<StackPanel>
<StackPanel.Resources>
<Style x:Key="ContentCtrl" TargetType="{x:Type ContentControl}">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="40"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ContentControl}">
<Grid>
<Ellipse Width="{TemplateBinding Width}" Height="{TemplateBinding Width}" Fill="{TemplateBinding Background}"/>
<ContentPresenter VerticalAlignment="Center"
HorizontalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<DataTemplate x:Key="template1">
<TextBlock Text="{Binding}" FontSize="12" FontWeight="Bold" TextWrapping="Wrap"></TextBlock>
</DataTemplate>
</StackPanel.Resources>
<Label Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="2">
<ContentControl Width="75" Style="{StaticResource ContentCtrl}" Content="Hello"/>
</Label>
<Label Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="3"
Background="Blue">
<ContentControl Name="contCtrl" ContentTemplate="{StaticResource template1}"
Content="This is the content of the content control."/>
</Label>
<Button Name="btn2" Margin="10, 10, 3, 3" Grid.Column="0" Grid.Row="4" Background="LightBlue" Click="OnClick">
<TextBlock TextWrapping="Wrap">Click </TextBlock>
</Button>
</StackPanel>
</Canvas>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Data;
using System.Windows.Media;
using System.Collections.ObjectModel;
namespace ContentControlSimple
{
public partial class Page1 : Canvas
{
void OnClick(object sender, RoutedEventArgs e)
{
if (contCtrl.HasContent == true)
{
MessageBox.Show("contCtrl has content");
}
}
}
}
Four-quadrant Cartesian coordinate system
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid.Resources>
<Style TargetType="{x:Type Canvas}">
<Setter Property="Width" Value="100" />
<Setter Property="Height" Value="100" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style TargetType="{x:Type Path}">
<Setter Property="Fill" Value="Red" />
<Setter Property="Data">
<Setter.Value>
<EllipseGeometry Center="0 0" RadiusX="5" RadiusY="5" />
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Canvas Grid.Column="3">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="-1" />
<TranslateTransform X="50" Y="50" />
</TransformGroup>
</Canvas.RenderTransform>
<Line X1="0" Y1="0" X2="50" Y2="50" Stroke="Black" />
<Polyline Points="-50 -50 50 -50 50 50 -50 50 -50 -50" Stroke="Blue" />
<Path />
</Canvas>
</Grid>
Origin at lower left. Y increases going up
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid.Resources>
<Style TargetType="{x:Type Canvas}">
<Setter Property="Width" Value="100" />
<Setter Property="Height" Value="100" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style TargetType="{x:Type Path}">
<Setter Property="Fill" Value="Red" />
<Setter Property="Data">
<Setter.Value>
<EllipseGeometry Center="0 0" RadiusX="5" RadiusY="5" />
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Canvas Grid.Column="1">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleY="-1" />
<TranslateTransform Y="100" />
</TransformGroup>
</Canvas.RenderTransform>
<Line X1="0" Y1="0" X2="100" Y2="100" Stroke="Black" />
<Polyline Points="0 0 0 100 100 100 100 0 0 0" Stroke="Blue" />
<Path />
</Canvas>
</Grid>
Set cursor area
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="cursors" Height="450" Width="600" Loaded="OnLoaded">
<Window.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="Margin" Value="3" />
</Style>
<Style TargetType="{x:Type Label}">
<Setter Property="FontSize" Value="14" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="LightBlue" />
<Setter Property="BorderThickness" Value="2" />
<Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>
<StackPanel>
<Border Width="300">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<StackPanel Margin="10">
<Label HorizontalAlignment="Left">Cursor Type</Label>
<ComboBox Width="100" SelectionChanged="CursorTypeChanged" HorizontalAlignment="Left" Name="CursorSelector">
<ComboBoxItem Content="AppStarting" />
<ComboBoxItem Content="ArrowCD" />
</ComboBox>
</StackPanel>
<StackPanel Margin="10">
<Label HorizontalAlignment="Left">Scope of Cursor</Label>
<StackPanel>
<RadioButton Name="rbScopeElement" IsChecked="True" Checked="CursorScopeSelected">Display Area Only</RadioButton>
<RadioButton Name="rbScopeApplication" Checked="CursorScopeSelected">Entire Appliation</RadioButton>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
<Border Name="DisplayArea" Height="250" Width="400" Margin="20" Background="AliceBlue">
<Label HorizontalAlignment="Center">
Move Mouse Pointer Over This Area
</Label>
</Border>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Input;
using System.IO;
using System.Collections;
namespace WpfApplication1
{
public partial class Window1 : Window
{
Cursor CustomCursor;
public Window1()
{
CustomCursor = new Cursor(Directory.GetCurrentDirectory() +Path.DirectorySeparatorChar + "CustomCursor.cur");
}
public void CursorTypeChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox source = e.Source as ComboBox;
if (source != null)
{
ComboBoxItem selectedCursor = source.SelectedItem as ComboBoxItem;
switch (selectedCursor.Content.ToString())
{
case "AppStarting":
DisplayArea.Cursor = Cursors.AppStarting;
break;
case "ArrowCD":
DisplayArea.Cursor = Cursors.ArrowCD;
break;
default:
break;
}
if (cursorScopeElementOnly == false)
{
Mouse.OverrideCursor = DisplayArea.Cursor;
}
}
}
public void CursorScopeSelected(object sender, RoutedEventArgs e)
{
RadioButton source = e.Source as RadioButton;
if (source != null)
{
if (source.Name == "rbScopeElement")
{
cursorScopeElementOnly = true;
Mouse.OverrideCursor = null;
}
if (source.Name == "rbScopeApplication")
{
cursorScopeElementOnly = false;
Mouse.OverrideCursor = DisplayArea.Cursor;
}
}
}
public void OnLoaded(object sender, RoutedEventArgs e)
{
((ComboBoxItem)CursorSelector.Items[0]).IsSelected = true;
}
private bool cursorScopeElementOnly = true;
}
}
Changing the cursor of the Border control by setting the Cursor property
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="cursors" Height="450" Width="600" Loaded="OnLoaded">
<Window.Resources>
<Style TargetType="{x:Type RadioButton}">
<Setter Property="Margin" Value="3" />
</Style>
<Style TargetType="{x:Type Label}">
<Setter Property="FontSize" Value="14" />
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="LightBlue" />
<Setter Property="BorderThickness" Value="2" />
<Setter Property="Margin" Value="10" />
</Style>
</Window.Resources>
<StackPanel>
<Border Width="300">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<Label HorizontalAlignment="Left">Cursor Type</Label>
<ComboBox Width="100" SelectionChanged="CursorTypeChanged" HorizontalAlignment="Left" Name="CursorSelector">
<ComboBoxItem Content="AppStarting" />
<ComboBoxItem Content="ArrowCD" />
<ComboBoxItem Content="Arrow" />
<ComboBoxItem Content="Cross" />
<ComboBoxItem Content="HandCursor" />
<ComboBoxItem Content="Help" />
<ComboBoxItem Content="IBeam" />
<ComboBoxItem Content="No" />
<ComboBoxItem Content="None" />
<ComboBoxItem Content="Pen" />
<ComboBoxItem Content="ScrollSE" />
<ComboBoxItem Content="ScrollWE" />
<ComboBoxItem Content="SizeAll" />
<ComboBoxItem Content="SizeNESW" />
<ComboBoxItem Content="SizeNS" />
<ComboBoxItem Content="SizeNWSE" />
<ComboBoxItem Content="SizeWE" />
<ComboBoxItem Content="UpArrow" />
<ComboBoxItem Content="WaitCursor" />
<ComboBoxItem Content="Custom" />
</ComboBox>
</StackPanel>
</Border>
<Border Name="DisplayArea" Height="250" Width="400" Margin="20" Background="AliceBlue">
<Label HorizontalAlignment="Center">
Move Mouse Pointer Over This Area
</Label>
</Border>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Input;
using System.IO;
using System.Collections;
namespace WpfApplication1
{
public partial class Window1 : Window
{
Cursor CustomCursor;
public Window1()
{
CustomCursor = new Cursor(Directory.GetCurrentDirectory() +Path.DirectorySeparatorChar + "CustomCursor.cur");
}
public void CursorTypeChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox source = e.Source as ComboBox;
if (source != null)
{
ComboBoxItem selectedCursor = source.SelectedItem as ComboBoxItem;
switch (selectedCursor.Content.ToString())
{
case "AppStarting":
DisplayArea.Cursor = Cursors.AppStarting;
break;
case "ArrowCD":
DisplayArea.Cursor = Cursors.ArrowCD;
break;
case "Arrow":
DisplayArea.Cursor = Cursors.Arrow;
break;
case "Cross":
DisplayArea.Cursor = Cursors.Cross;
break;
case "HandCursor":
DisplayArea.Cursor = Cursors.Hand;
break;
case "Help":
DisplayArea.Cursor = Cursors.Help;
break;
case "IBeam":
DisplayArea.Cursor = Cursors.IBeam;
break;
case "No":
DisplayArea.Cursor = Cursors.No;
break;
case "None":
DisplayArea.Cursor = Cursors.None;
break;
case "Pen":
DisplayArea.Cursor = Cursors.Pen;
break;
case "ScrollSE":
DisplayArea.Cursor = Cursors.ScrollSE;
break;
case "ScrollWE":
DisplayArea.Cursor = Cursors.ScrollWE;
break;
case "SizeAll":
DisplayArea.Cursor = Cursors.SizeAll;
break;
case "SizeNESW":
DisplayArea.Cursor = Cursors.SizeNESW;
break;
case "SizeNS":
DisplayArea.Cursor = Cursors.SizeNS;
break;
case "SizeNWSE":
DisplayArea.Cursor = Cursors.SizeNWSE;
break;
case "SizeWE":
DisplayArea.Cursor = Cursors.SizeWE;
break;
case "UpArrow":
DisplayArea.Cursor = Cursors.UpArrow;
break;
case "WaitCursor":
DisplayArea.Cursor = Cursors.Wait;
break;
case "Custom":
DisplayArea.Cursor = CustomCursor;
break;
default:
break;
}
}
}
public void OnLoaded(object sender, RoutedEventArgs e)
{
((ComboBoxItem)CursorSelector.Items[0]).IsSelected = true;
}
}
}

