using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
class AnchorForm : System.Windows.Forms.Form {
public AnchorForm() {
InitializeComponent();
CenterToScreen();
}
protected void dockNone_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.None;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void dockFill_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.Fill;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void dockRight_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.Right;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void dockLeft_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.Left;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void dockBottom_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.Bottom;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void dockTop_Click(object sender, System.EventArgs e) {
btnTheButton.Dock = DockStyle.Top;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void ancRight_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Right;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void ancBottom_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Bottom;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void ancLeft_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Left;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
protected void ancTop_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Top;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void ancNone_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.None;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void ancTopLeft_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Top | AnchorStyles.Left;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void ancTopRight_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Top | AnchorStyles.Right;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void ancBotLeft_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void ancBotRight_Click(object sender, System.EventArgs e) {
btnTheButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() +
"
Dock: " + btnTheButton.Dock.ToString();
}
private void InitializeComponent() {
this.dockRight = new System.Windows.Forms.MenuItem();
this.dockBottom = new System.Windows.Forms.MenuItem();
this.ancNone = new System.Windows.Forms.MenuItem();
this.ancTopLeft = new System.Windows.Forms.MenuItem();
this.ancTop = new System.Windows.Forms.MenuItem();
this.dockFill = new System.Windows.Forms.MenuItem();
this.mnuMainMenu = new System.Windows.Forms.MainMenu();
this.mnuAnchor = new System.Windows.Forms.MenuItem();
this.ancLeft = new System.Windows.Forms.MenuItem();
this.ancBottom = new System.Windows.Forms.MenuItem();
this.ancRight = new System.Windows.Forms.MenuItem();
this.ancTopRight = new System.Windows.Forms.MenuItem();
this.ancBotLeft = new System.Windows.Forms.MenuItem();
this.ancBotRight = new System.Windows.Forms.MenuItem();
this.mnuDock = new System.Windows.Forms.MenuItem();
this.dockTop = new System.Windows.Forms.MenuItem();
this.dockLeft = new System.Windows.Forms.MenuItem();
this.dockNone = new System.Windows.Forms.MenuItem();
this.btnTheButton = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// dockRight
//
this.dockRight.Index = 3;
this.dockRight.Text = "Right";
this.dockRight.Click += new System.EventHandler(this.dockRight_Click);
//
// dockBottom
//
this.dockBottom.Index = 1;
this.dockBottom.Text = "Bottom";
this.dockBottom.Click += new System.EventHandler(this.dockBottom_Click);
//
// ancNone
//
this.ancNone.Index = 4;
this.ancNone.Text = "None";
this.ancNone.Click += new System.EventHandler(this.ancNone_Click);
//
// ancTopLeft
//
this.ancTopLeft.Index = 5;
this.ancTopLeft.Text = "TopLeft";
this.ancTopLeft.Click += new System.EventHandler(this.ancTopLeft_Click);
//
// ancTop
//
this.ancTop.Index = 0;
this.ancTop.Text = "Top";
this.ancTop.Click += new System.EventHandler(this.ancTop_Click);
//
// dockFill
//
this.dockFill.Index = 4;
this.dockFill.Text = "Fill";
this.dockFill.Click += new System.EventHandler(this.dockFill_Click);
//
// mnuMainMenu
//
this.mnuMainMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.mnuAnchor,
this.mnuDock});
//
// mnuAnchor
//
this.mnuAnchor.Index = 0;
this.mnuAnchor.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.ancTop,
this.ancLeft,
this.ancBottom,
this.ancRight,
this.ancNone,
this.ancTopLeft,
this.ancTopRight,
this.ancBotLeft,
this.ancBotRight});
this.mnuAnchor.Text = "Anchor Value";
//
// ancLeft
//
this.ancLeft.Index = 1;
this.ancLeft.Text = "Left";
this.ancLeft.Click += new System.EventHandler(this.ancLeft_Click);
//
// ancBottom
//
this.ancBottom.Index = 2;
this.ancBottom.Text = "Bottom";
this.ancBottom.Click += new System.EventHandler(this.ancBottom_Click);
//
// ancRight
//
this.ancRight.Index = 3;
this.ancRight.Text = "Right";
this.ancRight.Click += new System.EventHandler(this.ancRight_Click);
//
// ancTopRight
//
this.ancTopRight.Index = 6;
this.ancTopRight.Text = "TopRight";
this.ancTopRight.Click += new System.EventHandler(this.ancTopRight_Click);
//
// ancBotLeft
//
this.ancBotLeft.Index = 7;
this.ancBotLeft.Text = "BottomLeft";
this.ancBotLeft.Click += new System.EventHandler(this.ancBotLeft_Click);
//
// ancBotRight
//
this.ancBotRight.Index = 8;
this.ancBotRight.Text = "BottomRight";
this.ancBotRight.Click += new System.EventHandler(this.ancBotRight_Click);
//
// mnuDock
//
this.mnuDock.Index = 1;
this.mnuDock.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
this.dockTop,
this.dockBottom,
this.dockLeft,
this.dockRight,
this.dockFill,
this.dockNone});
this.mnuDock.Text = "Dock Value";
//
// dockTop
//
this.dockTop.Index = 0;
this.dockTop.Text = "Top";
this.dockTop.Click += new System.EventHandler(this.dockTop_Click);
//
// dockLeft
//
this.dockLeft.Index = 2;
this.dockLeft.Text = "Left";
this.dockLeft.Click += new System.EventHandler(this.dockLeft_Click);
//
// dockNone
//
this.dockNone.Index = 5;
this.dockNone.Text = "None";
this.dockNone.Click += new System.EventHandler(this.dockNone_Click);
//
// btnTheButton
//
this.btnTheButton.Location = new System.Drawing.Point(8, 16);
this.btnTheButton.Name = "btnTheButton";
this.btnTheButton.Size = new System.Drawing.Size(120, 40);
this.btnTheButton.TabIndex = 0;
this.btnTheButton.Text = "The Button";
//
// AnchorForm
//
this.ClientSize = new System.Drawing.Size(480, 155);
this.Controls.Add(this.btnTheButton);
this.Menu = this.mnuMainMenu;
this.Name = "AnchorForm";
this.Text = "Anchoring and Docking Controls";
this.ResumeLayout(false);
}
private System.Windows.Forms.MenuItem dockNone;
private System.Windows.Forms.MenuItem dockFill;
private System.Windows.Forms.MenuItem dockRight;
private System.Windows.Forms.MenuItem dockLeft;
private System.Windows.Forms.MenuItem dockBottom;
private System.Windows.Forms.MenuItem dockTop;
private System.Windows.Forms.MenuItem mnuDock;
private System.Windows.Forms.Button btnTheButton;
private System.Windows.Forms.MenuItem ancRight;
private System.Windows.Forms.MenuItem ancBottom;
private System.Windows.Forms.MenuItem ancLeft;
private System.Windows.Forms.MenuItem ancTop;
private System.Windows.Forms.MenuItem mnuAnchor;
private System.Windows.Forms.MenuItem ancNone;
private System.Windows.Forms.MenuItem ancTopLeft;
private System.Windows.Forms.MenuItem ancBotRight;
private System.Windows.Forms.MenuItem ancBotLeft;
private System.Windows.Forms.MenuItem ancTopRight;
private System.Windows.Forms.MainMenu mnuMainMenu;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new AnchorForm());
}
}
Output color by R G B value for a Bitmap
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
public class Analyzer {
public static void Main() {
Image sample = new Bitmap("a.jpg");
MemoryStream buf = new MemoryStream();
sample.Save(buf, ImageFormat.Bmp);
byte[] currentImage = buf.GetBuffer();
int[] stats = new int[3];
for (int i = 0; i < currentImage.Length; ){
for (int j = 0; j < 3; j++) {
stats[j] += currentImage[i];
++i;
}
}
Console.WriteLine("Blue: " + stats[0]);
Console.WriteLine("Green: " + stats[1]);
Console.WriteLine("Red: " + stats[2]);
if ((stats[0] > stats[1]) && (stats[0] > stats[2]))
Console.WriteLine("This is a cold picture.");
if ((stats[1] > stats[0]) && (stats[1] > stats[2]))
Console.WriteLine("This is a summer picture.");
if ((stats[2] > stats[0]) && (stats[2] > stats[1]))
Console.WriteLine("This is a fiery picture.");
}
}
XmlDataProvider and XmlNamespaceMapping
<Window x:Class="XmlBinding.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XmlBinding"
Title="XmlBinding" Height="325" Width="400">
<Window.Resources>
<XmlDataProvider x:Key="Company" XPath="/sb:Company/sb:Employee">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping Uri="http://company.com" Prefix="sb" />
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
<x:XData>
<Company xmlns="http://company.com">
<Employee Name="A" Age="11" />
<Employee Name="B" Age="12" />
<Employee Name="C" Age="38" />
</Company>
</x:XData>
</XmlDataProvider>
<local:AgeToForegroundConverter x:Key="ageConverter" />
</Window.Resources>
<StackPanel DataContext="{StaticResource Company}">
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default" />
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding XPath=@Name}" />
(age: <TextBlock Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />)
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>Name:</TextBlock>
<TextBox Text="{Binding XPath=@Name}" />
<TextBlock>Age:</TextBlock>
<TextBox Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
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.Collections.Generic;
using System.Diagnostics;
using System.Collections;
using System.Data;
using System.Data.OleDb;
using System.ComponentModel;
using System.Xml;
namespace XmlBinding {
public partial class Window1 : Window {
public Window1() {
InitializeComponent();
}
ICollectionView GetCompanyView() {
DataSourceProvider provider = (DataSourceProvider)this.FindResource("Company");
return CollectionViewSource.GetDefaultView(provider.Data);
}
}
public class AgeToForegroundConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
Debug.Assert(targetType == typeof(Brush));
int age = int.Parse(value.ToString());
return (age > 25 ? Brushes.Red : Brushes.Black);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
}
}
XmlDataProvider and ItemsControl
<Page x:Class="WpfInteropShortcomings.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WpfInteropShortcomings"
>
<Page.Resources>
<XmlDataProvider x:Key="items" XPath="/Items/Item">
<x:XData>
<Items xmlns="">
<Item Title="A" Target="A.xaml" />
<Item Title="B" Target="B.xaml" />
<Item Title="C" Target="C.xaml" />
</Items>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="itemTemplate">
<TextBlock>
<Hyperlink NavigateUri="{Binding XPath=@Target}">
<TextBlock Text="{Binding XPath=@Title}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</Page.Resources>
<ItemsControl DataContext="{StaticResource items}" ItemsSource="{Binding}"
ItemTemplate="{StaticResource itemTemplate}"
VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Page>
//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.Windows.Interop;
using System.Windows.Forms.Integration;
namespace WpfInteropShortcomings
{
public partial class Window1 : Page
{
public Window1()
{
InitializeComponent();
ElementHost elemHost = new ElementHost();
elemHost.PropertyMap.Add("Text",
delegate(object host, string prop, object val)
{
ContentControl c = (ContentControl) elemHost.Child;
//c.Content = val;
Console.WriteLine(val);
});
}
}
}
Hyperlink and xpath filter for XmlDataProvider
<Page x:Class="WpfInteropShortcomings.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WpfInteropShortcomings"
>
<Page.Resources>
<XmlDataProvider x:Key="items" XPath="/Items/Item">
<x:XData>
<Items xmlns="">
<Item Title="A" Target="A.xaml" />
<Item Title="B" Target="B.xaml" />
<Item Title="C" Target="C.xaml" />
</Items>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="itemTemplate">
<TextBlock>
<Hyperlink NavigateUri="{Binding XPath=@Target}">
<TextBlock Text="{Binding XPath=@Title}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</Page.Resources>
<ItemsControl DataContext="{StaticResource items}" ItemsSource="{Binding}"
ItemTemplate="{StaticResource itemTemplate}"
VerticalAlignment="Top" HorizontalAlignment="Left"/>
</Page>
//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.Windows.Interop;
using System.Windows.Forms.Integration;
namespace WpfInteropShortcomings
{
public partial class Window1 : Page
{
public Window1()
{
InitializeComponent();
ElementHost elemHost = new ElementHost();
elemHost.PropertyMap.Add("Text",
delegate(object host, string prop, object val)
{
ContentControl c = (ContentControl) elemHost.Child;
//c.Content = val;
Console.WriteLine(val);
});
}
}
}
Load XmlDocument to XmlDataProvider
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="400" Width="600" Loaded="Window_Loaded" Name="window">
<Window.Resources>
<XmlDataProvider x:Key="xaml" />
</Window.Resources>
<StackPanel>
<TreeView Name="treeView1" ItemsSource="{Binding Source={StaticResource xaml}, XPath=*}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding XPath=*}">
<TextBlock Text="{Binding Path=Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<TextBox Text="{Binding ElementName=treeView1, Path=SelectedItem.OuterXml, Mode=OneWay}" TextWrapping="Wrap" />
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
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.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Markup;
using System.Xml;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
string xaml = XamlWriter.Save(this);
XmlDocument doc = new XmlDocument();
doc.LoadXml(xaml);
XmlDataProvider provider = (XmlDataProvider)FindResource("xaml");
provider.Document = doc;
provider.Refresh();
}
}
}
Get XmlElement from Bounded view
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="XmlBinding" Height="325" Width="400">
<Window.Resources>
<local:AgeToForegroundConverter x:Key="ageConverter" />
</Window.Resources>
<StackPanel Name="stackPanel">
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
<ListBox.GroupStyle>
<x:Static Member="GroupStyle.Default" />
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock Text="{Binding XPath=@Name}" />
(age: <TextBlock Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />)
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock>Name:</TextBlock>
<TextBox Text="{Binding XPath=@Name}" />
<TextBlock>Age:</TextBlock>
<TextBox Text="{Binding XPath=@Age}" Foreground="{Binding XPath=@Age, Converter={StaticResource ageConverter}}" />
<Button Name="birthdayButton">Birthday</Button>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
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.Collections.Generic;
using System.Diagnostics;
using System.Collections;
using System.Data;
using System.Data.OleDb;
using System.ComponentModel;
using System.Xml;
namespace WpfApplication1
{
public class AgeToForegroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debug.Assert(targetType == typeof(Brush));
int age = int.Parse(value.ToString());
return (age > 60 ? Brushes.Red : Brushes.Black);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
public partial class Window1 : Window
{
XmlDocument doc;
public Window1()
{
InitializeComponent();
doc = new XmlDocument();
doc.LoadXml(@"<Company xmlns='http://company.com'>
<Employee Name='A' Age='61' />
<Employee Name='B' Age='72' />
<Employee Name='C' Age='38' />
</Company>");
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("sb", "http://company.com");
Binding.SetXmlNamespaceManager(stackPanel, manager);
Binding b = new Binding();
b.XPath = "/sb:Company/sb:Employee";
b.Source = doc;
stackPanel.SetBinding(StackPanel.DataContextProperty, b);
this.birthdayButton.Click += birthdayButton_Click;
}
void birthdayButton_Click(object sender, RoutedEventArgs e) {
ICollectionView view = CollectionViewSource.GetDefaultView(stackPanel.DataContext);
XmlElement person = (XmlElement)view.CurrentItem;
person.SetAttribute("Age",(int.Parse(person.Attributes["Age"].Value) + 1).ToString());
Console.WriteLine(person.Attributes["Name"].Value);
Console.WriteLine(person.Attributes["Age"].Value);
}
}
}

