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."); } }
Author: coder
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); } } }
xps file viewer
<Window x:Class="Documents.ViewXPS" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="ViewXps" Height="300" Width="300" Loaded="window_Loaded"> <DocumentViewer Name="docViewer"> </DocumentViewer> </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; using System.Windows.Xps.Packaging; using System.IO; namespace Documents { public partial class ViewXPS : System.Windows.Window { public ViewXPS() { InitializeComponent(); } private void window_Loaded(object sender, RoutedEventArgs e) { XpsDocument doc = new XpsDocument("a.xps", FileAccess.Read); docViewer.Document = doc.GetFixedDocumentSequence(); doc.Close(); } } }