<Window x:Class="WpfApplication1.ShapesWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ShapesWindow" Height="160" Width="400">
<StackPanel>
<Canvas ClipToBounds="True" Grid.Row="3" Grid.Column="2" Width="150" Height="150">
<Rectangle Width="150" Height="150">
<Rectangle.Fill>
<RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.1,0.1" RadiusX="0.75" RadiusY="0.75">
<GradientStop Color="White" Offset="0" />
<GradientStop Color="#545454" Offset="1" />
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>ss
<Path Fill="Red">
<Path.Data>
<EllipseGeometry Center="75,75" RadiusX="2" RadiusY="2" />
</Path.Data>
</Path>
<Path Stroke="Red" StrokeThickness="2">
<Path.Data>
<EllipseGeometry Center="15,15" RadiusX="111.5" RadiusY="111.5" />
</Path.Data>
</Path>
</Canvas>
</StackPanel>
</Window>
ASP.NET & Csharp (C#)
ASP.NET & Csharp (C#) , Here you can find my posts about .NET c# .
Color Animation
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Red">
<Canvas.Triggers>
<EventTrigger RoutedEvent="Canvas.Loaded">
<BeginStoryboard>
<Storyboard TargetProperty="Background.Color">
<ColorAnimationUsingKeyFrames RepeatBehavior="Forever">
<LinearColorKeyFrame KeyTime="0:0:0" Value="Red" />
<LinearColorKeyFrame KeyTime="0:0:1" Value="Orange" />
<LinearColorKeyFrame KeyTime="0:0:7" Value="Red" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Canvas.Triggers>
</Canvas>
Apply Custom Grouping to a Collection
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:WpfApplication1="clr-namespace:WpfApplication1"
Title="WPF" Height="300" Width="160">
<Window.Resources>
<WpfApplication1:Countries x:Key="countries"/>
<WpfApplication1:GroupByContinentConverter x:Key="GroupByContinentConverter"/>
<CollectionViewSource
x:Key="cvs"
Source="{Binding Source={StaticResource countries}}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription Converter="{StaticResource GroupByContinentConverter}" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<ItemsControl ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="Name" >
<ItemsControl.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</ItemsControl.GroupStyle>
</ItemsControl>
</Grid>
</Window>
//File:Window.xaml.cs
using System;
using System.Globalization;
using System.Windows.Data;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
public class GroupByContinentConverter : IValueConverter
{
public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
Country country = (Country)value;
// Decide which group the country belongs in
switch (country.Continent)
{
case Continent.NorthAmerica:
return "Americas";
default:
return "Others";
}
}
public object ConvertBack(object value,Type targetType,object parameter,CultureInfo culture)
{
throw new NotImplementedException();
}
}
public class Country
{
private string name;
private Continent continent;
public Country(string name, Continent continent)
{
this.name = name;
this.continent = continent;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Continent Continent
{
get
{
return continent;
}
set
{
continent = value;
}
}
}
public enum Continent
{
Europe,
NorthAmerica,
}
public class Countries : Collection<Country>
{
public Countries()
{
this.Add(new Country("Great Britan", Continent.Europe));
this.Add(new Country("USA", Continent.NorthAmerica));
this.Add(new Country("Canada", Continent.NorthAmerica));
}
}
}
Create CollectionViewSource
//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;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace WpfApplication1 {
public class Employee : INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
protected void Notify(string propName) {
if( this.PropertyChanged != null ) {
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
string name;
public string Name {
get { return this.name; }
set {
if( this.name == value ) { return; }
this.name = value;
Notify(“Name”);
}
}
int age;
public int Age {
get { return this.age; }
set {
if( this.age == value ) { return; }
this.age = value;
Notify(“Age”);
}
}
public Employee() { }
public Employee(string name, int age) {
this.name = name;
this.age = age;
}
}
class People : ObservableCollection
public partial class Window1 : System.Windows.Window {
public Window1() {
InitializeComponent();
}
}
public class AgeToRangeConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
return (int)value < 25 ? "Under 25" : "Over 25";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}
}
[/csharp]
Use CollectionViewSource to sort and group data in XAML.
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:src="clr-namespace:WpfApplication1"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
Title="CollectionViewSourceSample">
<Window.Resources>
<src:Places x:Key="places"/>
<CollectionViewSource Source="{StaticResource places}" x:Key="cvs">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="CityName"/>
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="State"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<DockPanel>
<ListBox ItemsSource="{Binding Source={StaticResource cvs}}" DisplayMemberPath="CityName" Name="lb">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default"/>
</ListBox.GroupStyle>
</ListBox>
</DockPanel>
</Window>
//File:Window.xaml.cs
using System.Windows;
using System.Collections.ObjectModel;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
public class Place
{
private string name;
private string state;
public string CityName
{
get { return name; }
set { name = value; }
}
public string State
{
get { return state; }
set { state = value; }
}
public Place()
{
this.name = "";
this.state = "";
}
public Place(string name, string state)
{
this.name = name;
this.state = state;
}
}
public class Places : ObservableCollection<Place>
{
public Places()
{
Add(new Place("A", "WA"));
Add(new Place("B", "WA"));
Add(new Place("C", "WA"));
}
}
}
Dynamic Clipping
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/interactivedesigner/2006"
mc:Ignorable="d"
x:Class="PaintDrawExamples.DynamicClipping"
Width="640" Height="480">
<StackPanel.Resources>
<Storyboard x:Key="OnLoaded"/>
</StackPanel.Resources>
<StackPanel.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard x:Name="OnLoaded_BeginStoryboard" Storyboard="{DynamicResource OnLoaded}"/>
</EventTrigger>
</StackPanel.Triggers>
<Canvas Height="100" x:Name="Canvas" Width="436">
<Canvas.Clip>
<PathGeometry>
<PathFigure StartPoint="1,5" IsClosed="True" IsFilled="True">
<BezierSegment IsSmoothJoin="True" Point1="2,2" Point2="26,1" Point3="24,127" IsStroked="True"/>
<BezierSegment IsSmoothJoin="True" Point1="1,1" Point2="14,9" Point3="19,5" IsStroked="True"/>
<BezierSegment IsSmoothJoin="True" Point1="14,11" Point2="18,-22.5" Point3="24,-2" IsStroked="True"/>
<BezierSegment IsSmoothJoin="True" Point1="26,-200" Point2="29,1" Point3="300,5" IsStroked="True"/>
</PathFigure>
</PathGeometry>
</Canvas.Clip>
<Rectangle d:LayoutOverrides="Height" Stroke="{x:Null}" Fill="Red" Width="436" Height="100" x:Name="Rectangle" Canvas.Left="0" Canvas.Top="0"/>
<Label Background="Black" x:Name="Label" Content="This is my clipped space." Canvas.Left="46" Canvas.Top="26" d:IsHidden="True"/>
</Canvas>
</StackPanel>
//File:Window.xaml.cs
using System;
using System.IO;
using System.Net;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
namespace PaintDrawExamples
{
public partial class DynamicClipping
{
public DynamicClipping()
{
this.InitializeComponent();
this.Canvas.VerticalAlignment = VerticalAlignment.Center;
this.Canvas.HorizontalAlignment = HorizontalAlignment.Center;
CompositionTarget.Rendering += CompositionTarget_Rendering;
}
private void CompositionTarget_Rendering(object sender, EventArgs e)
{
Point mousePos = Mouse.GetPosition(this.Canvas);
Geometry clippingRegion = this.Canvas.Clip;
TranslateTransform newPos = new TranslateTransform();
newPos.X = mousePos.X - (this.Canvas.Width / 2);
newPos.Y = mousePos.Y - (this.Canvas.Height / 2);
clippingRegion.Transform = newPos;
}
}
}
Clipping With Viewbox
<Window x:Class="Drawing.ClippingWithViewbox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ClippingWithViewbox" Height="335.2" Width="401.6"
>
<Window.Resources>
<GeometryGroup x:Key="clipGeometry" FillRule="Nonzero">
<EllipseGeometry RadiusX="75" RadiusY="50" Center="100,150"></EllipseGeometry>
<EllipseGeometry RadiusX="100" RadiusY="25" Center="200,150"></EllipseGeometry>
<EllipseGeometry RadiusX="75" RadiusY="130" Center="140,140"></EllipseGeometry>
</GeometryGroup>
</Window.Resources>
<Grid>
<Viewbox >
<Button Width="350" Height="350" Clip="{StaticResource clipGeometry}">A button</Button>
</Viewbox>
</Grid>
</Window>