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