<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; } } }