<?xml version="1.0" encoding="windows-1254"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arda Çetinkaya &#187; WPF</title>
	<atom:link href="http://www.minepla.net/tag/wpf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.minepla.net</link>
	<description></description>
	<lastBuildDate>Sat, 04 Sep 2010 13:09:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>MEF&#8217;i basit bir WPF uygulaması ile daha iyi anlıyoruz&#8230;</title>
		<link>http://www.minepla.net/2010/05/mef-i-basit-bir-wpf-uygulamasi-ile-daha-iyi-anliyoruz/</link>
		<comments>http://www.minepla.net/2010/05/mef-i-basit-bir-wpf-uygulamasi-ile-daha-iyi-anliyoruz/#comments</comments>
		<pubDate>Sat, 01 May 2010 18:28:07 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MEF]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=1169</guid>
		<description><![CDATA[Önceki bir kaç yazımda MEF(Managed Extensibility Framework) ile ilgili bir şeyler yazmış, kısaca ve basitçe anlatmaya çalışmıştım. Bu yazımda onları birleştirerek ve ilerki yazılarda da kullanabileceğimiz bir örnek olması adına MEF’in WPF ortamında basitçe uygulanmasına değinerek MEF’i biraz daha iyi anlamaya çalışacağız. Biz yazılımcılar daha çok kod kavramını sevdiğimiz için çok karmaşık olmasa da diğer [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F05%2Fmef-i-basit-bir-wpf-uygulamasi-ile-daha-iyi-anliyoruz%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F05%2Fmef-i-basit-bir-wpf-uygulamasi-ile-daha-iyi-anliyoruz%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Önceki bir kaç yazımda <strong>MEF(Managed Extensibility Framework)</strong> ile ilgili bir şeyler yazmış, kısaca ve basitçe anlatmaya çalışmıştım. Bu yazımda onları birleştirerek ve ilerki yazılarda da kullanabileceğimiz bir örnek olması adına MEF’in WPF ortamında basitçe uygulanmasına değinerek <strong>MEF</strong>’i biraz daha iyi anlamaya çalışacağız.</p>
<p>Biz yazılımcılar daha çok kod kavramını sevdiğimiz için <img src='http://www.minepla.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  çok karmaşık olmasa da diğer yazılara nazaran biraz daha kod örneği içeren bir yazı olacak bu şimdiden belirtim. Bu arada kodları elimden geldiğince çok basit yazıp, ilerleyen yazılarda başka konular ile onları değiştirerek biraz daha eli yüzü düzgün hale getireceğiz.</p>
<p><strong>Ne yapacağız?</strong></p>
<p>Gerçek hayatta kullanamayacağımız, anlamsız bir WPF “plugin”  uygulaması yapıyor olacağız. Gerçek hayatta kullanamayacağız belki ama kullanılabilir uygulamalar yapmamız açısından vizyon katacak bir örnek olacak.</p>
<p><strong>Başlıyoruz&#8230;</strong></p>
<p><a href="http://www.minepla.net/wp-content/uploads/WPFandMEF.jpg"><img class="size-medium wp-image-1174 alignleft" title="WPFandMEF" src="http://www.minepla.net/wp-content/uploads/WPFandMEF-205x300.jpg" alt="" width="205" height="300" /></a>Öncelikle yandaki resimdeki gibi bir proje yapısı oluşturalım.<strong> &#8220;WPFMEF&#8221;</strong> ana WPF uygulamamız olacak. Bu uygulama, yüklenen “plugin”leri çalıştırmakla yükümlü olacak. <strong>&#8220;FirstWPFPlugin&#8221;</strong> ve <strong>&#8220;SecondWPFPlugin&#8221;</strong> projeleri ise<strong> “WPF User Control”</strong> olarak yaratacağımız, WPF’e kullanıcı kontrolü olarak yükleyeceğimiz,”plugin”ler olacak..<strong>.&#8221;Common&#8221;</strong> projesi ise tüm uygulamalarda ortak olarak kullnabileceğimiz bileşenleri içerecek.</p>
<p><strong>Ana uygulama&#8230;</strong></p>
<p><strong>“WPFMEF”</strong> projesi az önce belirttiğim gibi MEF ile oluşturduğumuz “plugin”leri çalıştaracak uygulama. Basitçe aşağıdaki gibi bir ekran görüntüsüne sahip.</p>
<p style="text-align: center;"><a href="http://www.minepla.net/wp-content/uploads/mefwpf.jpg"><img class="alignnone size-medium wp-image-1175" title="mefwpf" src="http://www.minepla.net/wp-content/uploads/mefwpf-300x194.jpg" alt="" width="300" height="194" /></a></p>
<p>Ya da aşağıdaki gibi bir XAML’e&#8230;</p>
<pre class="brush: xml;">
&lt;Window x:Class=&quot;WPFMEF.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;502&quot; Width=&quot;775&quot;&gt;
    &lt;Window.Resources&gt;
        &lt;DataTemplate x:Key=&quot;ListBoxDataTemplate&quot;&gt;
            &lt;Grid&gt;
                &lt;Grid.ColumnDefinitions&gt;
                    &lt;ColumnDefinition Width=&quot;100&quot;&gt;&lt;/ColumnDefinition&gt;
                    &lt;ColumnDefinition Width=&quot;90&quot;&gt;&lt;/ColumnDefinition&gt;
                &lt;/Grid.ColumnDefinitions&gt;
                &lt;TextBlock Grid.Column=&quot;0&quot;  Text=&quot;{Binding Path=Name}&quot;&gt;&lt;/TextBlock&gt;
                &lt;Button Grid.Column=&quot;1&quot; Width=&quot;50&quot; Content=&quot;Çalıştır&quot; CommandParameter=&quot;{Binding Path=Name}&quot; Click=&quot;Button_Click&quot;&gt;&lt;/Button&gt;
            &lt;/Grid&gt;

        &lt;/DataTemplate&gt;

    &lt;/Window.Resources&gt;
    &lt;Grid&gt;
        &lt;ListBox Height=&quot;374&quot; ItemTemplate=&quot;{StaticResource ResourceKey=ListBoxDataTemplate}&quot;   HorizontalAlignment=&quot;Left&quot; Margin=&quot;12,54,0,0&quot; Name=&quot;listBox1&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;190&quot; /&gt;
        &lt;Label Content=&quot;Sistemde yüklü pluginler:&quot; Height=&quot;28&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;0,20,0,0&quot; Name=&quot;label1&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;190&quot; /&gt;
        &lt;Canvas Height=&quot;374&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;211,54,0,0&quot; Name=&quot;canvas1&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;502&quot; /&gt;
        &lt;Label Content=&quot;Plugin içeriği&quot; Height=&quot;28&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;211,20,0,0&quot; Name=&quot;label2&quot; VerticalAlignment=&quot;Top&quot; /&gt;
    &lt;/Grid&gt;

&lt;/Window&gt;
</pre>
<p>Fark etmiş olduğunuz gibi basit bir ekran&#8230;Plugin’lerin listeneceği bir <strong>“Listbox”</strong> ve seçilen <strong>“plugin”</strong>nin çalışması için bir <strong>“Canvas”</strong> kontrolü içeriyor temel olarak. Bu uygulama için “plugin”leri yönetecek bir uygulama demiştik en başta hatırlarsanız. Peki nasıl yönetecek?&#8230;</p>
<p>Bunun için bu projede <strong>PluginFactory</strong> diye bir sınıf yaratmamız lazım. Bu sınıf ile <strong>&#8220;plugin&#8221;</strong>lerimizi yöneteceğiz. Sonraki yazılarda da bu sınıfı geliştirip, güzelleştiriyor olacağım. Aşağıdaki kod parçası şimdilik işimize yarayacaktır. Yorum şeklinde kodları açıklamaya çalıştım.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition.Hosting;
using Common;
using System.Windows.Controls;

namespace WPFMEF
{
    public class PluginFactory
    {
        //Plugin'lerimiz yüklü olduğu dizin
        private string pluginPath;

        //Plugin'lerimizin yüklü olduğu dizinin
        //MEF tarafındaki karşılığı.Adından da
        //anlaşıldığı üzere katalog gibi düşünebiliriz.
        //Uygulamada Plugin'lerimizin tutulduğu
        //yer de diyebiliriz.
        private DirectoryCatalog catalog;

        //Import edilen Part'ların,yani plugin'lerin
        //yaşam sürecini sürdürdüğü kısım olarak tanımlamak
        //bu aşamada yeterli olacaktır.
        private CompositionContainer container;

        //PluginFactory sınıfımızı yaratıyoruz.
        //Bunun için dışarıdan, plugin'lerin sistem üzerinde
        //nerede olduklarını parametre olarak veriyoruz.
        //İçeride ilgili atamaları yapıp,gerekli nesneleri
        //yaratıyoruz.
        public PluginFactory(string pluginPath)
        {
            try
            {
                this.pluginPath = pluginPath;
                this.catalog = new DirectoryCatalog(pluginPath);
                this.container = new CompositionContainer(catalog);
            }
            catch (System.IO.DirectoryNotFoundException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        //Bu metod ile sisteme yüklenmiş tüm &quot;MEF Part&quot;larını,
        //ya da kendi tabirimiz ile &quot;plugin&quot;leri listeliyoruz.
        //Önceki yazılarımda bahsetmiş olduğum &quot;metadata&quot; bilgisine
        //sahip olan &quot;plugin&quot;leri listeliyoruz.
        public List&lt;IPluginMetaData&gt; GetAllPlugins()
        {
            List&lt;IPluginMetaData&gt; list = new List&lt;IPluginMetaData&gt;();

            //Burada kendi interface'imiz ile yarattığımız,MEF Part'larını
            //alıyoruz.Belirttiğimiz dizindeki diğer 'Part'lar bu sayede gelmeyecektir.
            //Ayrıca bu noktada yine kendi yarattığımız IPluginMetaData'sı ile
            //'Part'ları listemize ekliyoruz.
            //&quot;PluginForWPF&quot; parametresi 'Plugin'lerimizi işaretlediğimiz
            //bir kontrat bilgisi olarak bu metodda kullanılıyor. &quot;Plugin&quot; yaratırken
            //tekrardan dönüyor olacağız.
            var controllerExport = container.GetExports(typeof(IPlugin),
                                                        typeof(IPluginMetaData),
                                                        &quot;PluginForWPF&quot;);
            //Yukarıdaki ifadeyi LINQ şeklinde kullanarak bir List&lt;&gt; tipindeki
            //değişkene atmak tabi ki mümkün.
            //Ancak biraz daha açık olması adına aşağıdaki gibi bir kod bloğunu
            //listemizi oluşturmak adına kullanabiliriz.
            foreach (var item in controllerExport)
            {
                if (item.Metadata is IPluginMetaData)
                    list.Add((IPluginMetaData)item.Metadata);

            }
            return list;

        }

        //Bu metod ile ismini verdiğimiz &quot;Part&quot;ı ya da kendi tabirimiz ile
        //&quot;Plugin&quot;ni çekip kullanıyoruz.Bir önceki metoddaki yaklaşımın
        //çok benzeri...
        public UserControl LoadPlugin(string name)
        {
            var controllerExport = container.GetExports(typeof(IPlugin),
                                                        typeof(IPluginMetaData),
                                                        &quot;PluginForWPF&quot;);

            foreach (var item in controllerExport)
            {
                IPluginMetaData metaData = item.Metadata as IPluginMetaData;
                if (metaData.Name == name)
                {
                    return (UserControl)item.Value;
                }
            }

            return null;
        }

    }
}
</pre>
<p>Şimdi ana uygulamamızdan bu<strong> PluginFactory</strong> sınıfını kullanarak, ana ekranda &#8220;plugin&#8221;lerimizi yönetebileceğiz. Bunun için de ana uygulamızda aşağıdaki gibi bir kod kullanmamız gerekecek.</p>
<pre class="brush: csharp;">
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;

namespace WPFMEF
{

    public partial class MainWindow : Window
    {
        private PluginFactory _pluginFactory;
        public MainWindow()
        {

            InitializeComponent();
            LoadPlugins();
        }

        //&quot;Plugin&quot;lerimizi yada MEF'deki adıyla Part'ları
        //Ekrandaki ListBox kontrolüne ekliyoruz. Bu sayede
        //sistem tarafından hangi &quot;Part&quot;lar yüklenmiş bunları
        //görebiliyoruz
        private void LoadPlugins()
        {
            _pluginFactory = new PluginFactory(@&quot;C:\WpFPlugins&quot;);
            Binding binder = new Binding();
            binder.Source = _pluginFactory.GetAllPlugins();
            listBox1.SetBinding(ListBox.ItemsSourceProperty, binder);
        }

        //Yüklenen &quot;Plugin&quot;leri çalıştırmak için bu event'i kullanıyoruz.
        //Bu &quot;event&quot; ListBox kontrolünde listelenen &quot;Plugin&quot; isimlerine tıklandığı
        //zaman çalışan bir metod.
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            canvas1.Children.Clear();
            Button button = sender as Button;
            UserControl control = _pluginFactory.LoadPlugin(button.CommandParameter.ToString());
            canvas1.Children.Add(control);
        }
    }
}
</pre>
<p><strong>Sıra geldi &#8220;Plugin&#8221;lere&#8230;</strong></p>
<p>Öncelikle &#8220;Common&#8221; projesinde aşağıdaki gibi bir sınıf tanımlamamız lazım. Bu sınıf ile ilgili ayrıntıları önceki MEF yazılarımdan tekrar tazeleyebilirsiniz.</p>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.Composition;

namespace Common
{
    //&quot;Metadata&quot;mızın içeriğni belirliyoruz.
    //Ne gibi bilgiler tutabileceğimizi istediğimiz gibi tanımlayabiliriz.
    public interface IPluginMetaData
    {
        string Name { get; }
        string Version { get; }
        string Author { get; }

    }

    public interface IPlugin
    { }

    //ExportAttribute tipinde, &quot;Attribute&quot; tanımlıyoruz ki
    //Yaratacağımız Part'da bu &quot;Attribute&quot;u kullanabilelim
    //Burda önemli olan constructor'da base'i çağırıp
    //ExportAttribute'da hangi arayüz ile tanımlama yapacağımızı belirtmek.
    [MetadataAttribute]
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class PluginMetadataAttribute : ExportAttribute
    {
        public PluginMetadataAttribute(string name, string version, string author)
            : base(typeof(IPluginMetaData))
        {
            Name = name;
            Version = version;
            Author = author;

        }

        //IPluginMetaData arayüzünde ki özellikleri burada da tanımlıyoruz
        //Hepsini tanımlama zorunda değiliz.Tanımlamadıklarımız varsayılan
        //değerleri ile gelecektir.
        public string Name { get; set; }
        public string Version { get; set; }
        public string Author { get; set; }

    }
}
</pre>
<p>Plugin&#8217;ler için gerekli temel şeyleri yarattıktan sonra, ilk plugin&#8217;imizi kodlayabiliriz. Yukarda da belirttiğim gibi, bu ilk plugin bir WPF kullanıcı kontrolü olacak.&#8221;FirstWPFPlugin&#8221; projesinde ilgili kodları yazıyor olacağız. Çok basit ve anlamsız bir arayüz oluşturalım isterseniz&#8230;</p>
<pre class="brush: xml;">
&lt;UserControl x:Class=&quot;Plugins.FirstWPFPlugin&quot;
             xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
             xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
             xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
             xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
             mc:Ignorable=&quot;d&quot;
             d:DesignHeight=&quot;300&quot; d:DesignWidth=&quot;300&quot;&gt;
    &lt;Grid&gt;
        &lt;Button Content=&quot;Tıklayalım Bakalım&quot; Click=&quot;button1_Click&quot; Height=&quot;23&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;77,107,0,0&quot; Name=&quot;button1&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;135&quot; /&gt;
        &lt;Label  Content=&quot;Bu ilk WPF Plugin'inimiz.&quot; Height=&quot;28&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;77,84,0,0&quot; Name=&quot;label1&quot; VerticalAlignment=&quot;Top&quot; FontStretch=&quot;Expanded&quot; Width=&quot;149&quot; /&gt;
    &lt;/Grid&gt;
&lt;/UserControl&gt;
</pre>
<p>Şimdi de aynı anlamsızlıkta kod tarafını yazalım.</p>
<pre class="brush: csharp;">
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 Common;
using System.ComponentModel.Composition;

namespace Plugins
{

    //Export, özelliğini bu yarattığımız kontrole vererek
    //MEF'e bu kontrolün bir PART olarak Import edileceğini
    //söylüyoruz. Bu noktada IPlugin şeklinde önceden yarattığımız
    //interface'i de parametre olarak vermemiz gerekiyor.
    //MEF'de Export ettiğimiz tüm bileşenlerin belli bir kontart ismi
    //yada belli bir arayüz tipinden geliyor olması gerekmekte.
    //&quot;PluginForWPF&quot; bizim kontrat ismimiz, IPlugin'de arayüzümüz.
    [Export(&quot;PluginForWPF&quot;, typeof(IPlugin))]
    //PluginMetadata özelliği ise Export ettiğimiz sınıflara
    //ekstra olarak verebileceğimiz metadata bilgisini içeren,
    //yine kendi yarattığımız bir özellik sınıfı.
    [PluginMetadata(&quot;FirstWPFPlugin&quot;, &quot;1.0&quot;, &quot;Arda&quot;)]
    //Bu kısma ilerleyen yazılarda değiniyor olacağım
    [PartCreationPolicy(CreationPolicy.NonShared)]
    //WPF kullanıcı kontrolü olduğundan UserControl sınıfından
    //türüyor olması gerekmekte.IPlugin ise bizim kendi arayüzümüz.
    public partial class FirstWPFPlugin : UserControl,IPlugin
    {
        public FirstWPFPlugin()
        {
            InitializeComponent();
        }

        //Sanırım fazla açıklamaya gerek yok (:
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(&quot;Hello world&quot;);
        }
    }
}
</pre>
<p>Bu projeyi &#8220;Build&#8221; edip daha sonra oluşan *.dll&#8217;i, ana uygulamamızın &#8220;plugin&#8221;leri kontrol ettiği dizin altına koymamız gerekmekte. Bu örnekte bu dizin &#8220;C:\WpfPlugins&#8221; oluyor&#8230;(:</p>
<p>Ana uygulamamız bu dizine bakıp, bu dizindeki &#8220;plugin&#8221;leri yüklüyor olacak. Uygulamayı çalıştırdığımızda aşağıdaki gibi bir ekran görüntüsü elde ediyor olacağız.</p>
<p style="text-align: center;"><a href="http://www.minepla.net/wp-content/uploads/finalmef.jpg"><img class="size-full wp-image-1176 aligncenter" title="finalmef" src="http://www.minepla.net/wp-content/uploads/finalmef.jpg" alt="" width="549" height="366" /></a></p>
<p>Umarım MEF ile ilgili olarak en azından bir şeylerin aklınızda oluşmasında yardımcı olan bir yazı olmuştur. İlerleyen yazılarda bu örnekleri geliştirip çok daha faydalı örnekler yapıyor olacağız. Bundan dolayı her türlü sorunuzu yada fikrinizi beklerim&#8230;</p>
<p>Not: Bu yazıdaki örnek kodları ve projeyi<a href="http://cid-f66549bc9e13f731.skydrive.live.com/self.aspx/Code/WPFMEF.rar" target="_blank"> <strong>buradan</strong></a> indirebilirsiniz.(Visual Studio 2010 projesi)</p>
<p>Not: Yukarıda bahsettiğim &#8220;SecondWPFPlugin&#8221;den bahsetmedim ama ekteki kodlarda oda mevcut.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2010/05/mef-i-basit-bir-wpf-uygulamasi-ile-daha-iyi-anliyoruz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF&#8217;de &#8220;ApplicationCommands&#8221; nedir?</title>
		<link>http://www.minepla.net/2010/01/wpfde-applicationcommands-nedir/</link>
		<comments>http://www.minepla.net/2010/01/wpfde-applicationcommands-nedir/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 12:53:31 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=927</guid>
		<description><![CDATA[Uygulamalarımızda standart bazı işlemleri yapma ihtiyacı duyabiliriz. &#8220;Cut&#8221;,&#8221;Copy&#8221;,&#8221;Paste&#8221; gibi&#8230; WPF bu standart işlemleri kendi uygulamalarımızda kolayca kullanabilmemizi &#8220;ApplicationCommands&#8221; kavramı ile sağlıyor. Ve bir çok kod kalabalığından bizi kurtarıyor. Aşağıda yazdığım basit örnek üzerinden gidersek sanırım daha anlaşılır olacaktır. 1 &#60;Grid&#62; 2 &#60;!&#8211;  &#8211;&#62; 3 &#60;TextBox Height=&#8220;23&#8243; HorizontalAlignment=&#8220;Right&#8221; Margin=&#8220;0,50,229,0&#8243; Name=&#8220;txtText&#8221; VerticalAlignment=&#8220;Top&#8221; Width=&#8220;120&#8243; /&#62; 4 &#60;Menu Margin=&#8220;0,0,0,285&#8243;&#62; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpfde-applicationcommands-nedir%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpfde-applicationcommands-nedir%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Uygulamalarımızda standart bazı işlemleri yapma ihtiyacı duyabiliriz. &#8220;Cut&#8221;,&#8221;Copy&#8221;,&#8221;Paste&#8221; gibi&#8230; WPF bu standart işlemleri kendi uygulamalarımızda kolayca kullanabilmemizi &#8220;ApplicationCommands&#8221; kavramı ile sağlıyor. Ve bir çok kod kalabalığından bizi kurtarıyor.</p>
<p>Aşağıda yazdığım basit örnek üzerinden gidersek sanırım daha anlaşılır olacaktır.</p>
<h5>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 1</span></span><span style="font-weight: normal;"> &lt;Grid&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 2</span></span><span style="font-weight: normal;"> &lt;!&#8211;  &#8211;&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 3</span></span><span style="font-weight: normal;"> &lt;TextBox Height=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;23&#8243;</span></span><span style="font-weight: normal;"> HorizontalAlignment=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Right&#8221;</span></span><span style="font-weight: normal;"> Margin=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;0,50,229,0&#8243;</span></span><span style="font-weight: normal;"> Name=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;txtText&#8221;</span></span><span style="font-weight: normal;"> VerticalAlignment=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Top&#8221;</span></span><span style="font-weight: normal;"> Width=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;120&#8243;</span></span><span style="font-weight: normal;"> /&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 4</span></span><span style="font-weight: normal;"> &lt;Menu Margin=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;0,0,0,285&#8243;</span></span><span style="font-weight: normal;">&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 5</span></span><span style="font-weight: normal;"> &lt;MenuItem Command=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;ApplicationCommands.Cut&#8221;</span></span><span style="font-weight: normal;"> Header=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Kes&#8221;</span></span><span style="font-weight: normal;"> /&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 6</span></span><span style="font-weight: normal;"> &lt;MenuItem Command=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;ApplicationCommands.Copy&#8221;</span></span><span style="font-weight: normal;"> Header=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Kopyala&#8221;</span></span><span style="font-weight: normal;"> /&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 7</span></span><span style="font-weight: normal;"> &lt;MenuItem Command=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;ApplicationCommands.Paste&#8221;</span></span><span style="font-weight: normal;"> Header=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Yapıştır&#8221;</span></span><span style="font-weight: normal;"> /&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 8</span></span><span style="font-weight: normal;"> &lt;/Menu&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 9</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 10</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">&lt;!&#8211; </span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 11</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">Bu düğmeye basıldığında ApplicationCommands.Cut komutu(Command) çalışacak.</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 12</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">Hangi kontrol üzerinden çalışacağını CommandTarget özelliği ile</span></span><span style="color: #339966;"><span style="font-weight: normal;"> belirleyebiliyoruz.</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 13</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">txtSource isimli textbox içerisindeki değer,btnCut</span></span><span style="color: #339966;"><span style="font-weight: normal;">&#8216;a bastığımız zaman &#8220;Cut&#8221; komutu</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 14</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">clipboard tarafında gerekli işlemi yapacaktır.</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 15</span></span><span style="font-weight: normal;"> </span><span style="color: #339966;"><span style="font-weight: normal;">&#8211;&gt;</span></span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 16</span></span><span style="font-weight: normal;"> &lt;Button x:Name=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;btnCut&#8221;</span></span><span style="font-weight: normal;"> Content=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;Kes&#8221;</span></span><span style="font-weight: normal;"> Command=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;ApplicationCommands.Cut&#8221;</span></span><span style="font-weight: normal;"> CommandTarget=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;{Binding ElementName=txtSource}&#8221;</span></span><span style="font-weight: normal;"> Margin=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;12,120,384,161&#8243;</span></span><span style="font-weight: normal;">&gt;&lt;/Button&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 17</span></span><span style="font-weight: normal;"> &lt;TextBox x:Name=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;txtSource&#8221;</span></span><span style="font-weight: normal;"> Margin=</span><span style="color: #a31515;"><span style="font-weight: normal;">&#8220;125,120,177,161&#8243;</span></span><span style="font-weight: normal;">&gt;&lt;/TextBox&gt;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"><span style="font-weight: normal;"> 18</span></span><span style="font-weight: normal;"> &lt;/Grid&gt;</span></p>
</h5>
<p>Yukarıdaki kod bloğunda görmüş olduğunuz gibi bir tane &#8220;Menu&#8221; yaratıyoruz. Bu menünün 3 tane &#8220;MenuItem&#8221;ı var. Standart bir uygulamadıki &#8220;Kes&#8221;,&#8221;Kopyala&#8221;,&#8221;Yapıştır&#8221; işlemlerini yapıyor. Bu menü elemanlarına basıldığında ne yapılacağını &#8220;Command&#8221; özelliğini kullanarak belirtebiliyoruz. Bu örneğimizde &#8220;ApplicationCommands&#8221; kavramından bahsediyor olduğumdan dolayı, &#8220;ApplicationCommands.Cut&#8221;,&#8221;ApplicationCommands.Copy&#8221;,&#8221;ApplicationCommands.Paste&#8221; komutlarını kullandık. Bu komutlar sayesinde bu standart işlemler için ekstra bir şey yapmamıza gerek yok. Tabi ki uygulamamızın özelliklerine göre kendi &#8220;Command&#8221;(komutlarımızı) yazabiliriz.</p>
<p>Uygulamamızı çalıştırdığımız zaman aşağıdaki gibi bir ekran görüntüsü bizi karşılayacaktır.</p>
<p style="text-align: center;"><a href="http://www.minepla.net/wp-content/uploads/CutCopyPaste.jpg"><img class="aligncenter size-full wp-image-928" title="CutCopyPaste" src="http://www.minepla.net/wp-content/uploads/CutCopyPaste.jpg" alt="" width="368" height="245" /></a></p>
<p>Dikkat ederseniz tüm menü elemanları ve diğer &#8220;Kes&#8221; düğmemiz aktif değil. Bunun nedeni &#8220;ApplicationCommands&#8221; ilgili komutları bizim için yönetiyor olması. Uygulamamızda kesip yada kopyalanacak bir şey olmadığından dolayı ilgili komutların tüm tetikleyicileri aktif değil. Bu uygulama dışında her hangi başka bir uygulamadan bir kopyalama ya da kesme işlemi yapıp bu uygulamaya döndüğünüzde menüdeki &#8220;Yapıştır&#8221; elemanının aktif olduğunu göreceksiniz.</p>
<p>Ya da büyük kes düğmesinin yanındaki TextBox&#8217;a herhangi bir değer girip seçtiğinizde, &#8220;Kes&#8221; düğmesinin aktif olduğunu göreceksiniz.Bunun nedeni &#8220;Kes&#8221; düğmesinin &#8220;CommandTarget&#8221; özeliğinin TextBox&#8217;a ayarlanmış olması.</p>
<p><a href="http://www.minepla.net/wp-content/uploads/CutCopyPaste1.jpg"><img class="aligncenter size-medium wp-image-929" title="CutCopyPaste1" src="http://www.minepla.net/wp-content/uploads/CutCopyPaste1-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>&#8220;Kes&#8221; düğmesine bastığımzda, tekrardan &#8220;Kes&#8221; düğmesi aktifliğini kaybedecektir. Eğer ekrandaki hiç bir TextBox&#8217;da &#8220;focus&#8221; yok ise menüdeki &#8220;Yapıştır&#8221; elemanının aktif olmaması dikkatinizi  çekmiştir. Bunun nedeni de &#8220;Yapıştır&#8221; işleminin yapılacağı her hangi bir kontrolün seçilmemiş olması. Menünün altında ki TextBox&#8217;ı seçtiğimizde ve &#8220;Yapıştır&#8221; dediğimizde kestiğimiz yazının yapıştığını göreceksiniz.Bu kadar basit&#8230;:)</p>
<p>ApplicationCommands gibi, WPF&#8217;de  &#8221;NavigationCommands&#8221;, &#8220;MediaCommands&#8221;, &#8220;EditingCommands&#8221; ve  &#8221;ComponentCommands&#8221; sınıflarıda bazı işlemler için bize kolaylıklar sunuyor.</p>
<p>Burada altınız çizmek istediğim bir nokta var. Dikkat ettiyseniz ApplicationCommands.Cut komutunu iki farklı WPF kontrolünde tanımladık ve her hangi başka bir işlem yapmadan bu komut aynı şekilde çalıştı. Bunun altında WPF ile beraber ortaya çıkan &#8220;Commands&#8221; kavramı yer almakta. İlerleyen yazılarda bundan da bahsediyor olacağım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2010/01/wpfde-applicationcommands-nedir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF 4.0&#8242;da görev çubuğunda &#8220;icon&#8221; gösterimi&#8230;</title>
		<link>http://www.minepla.net/2010/01/wpf-4-0da-gorev-cubudhunda-icon-gosterimi/</link>
		<comments>http://www.minepla.net/2010/01/wpf-4-0da-gorev-cubudhunda-icon-gosterimi/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 21:35:30 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=917</guid>
		<description><![CDATA[Önceki yazımda WPF 4.0&#8242;da Windows 7&#8242;nin görev çubuğundaki yeni özelliklerden ön izleme özelliğini kendi uygulamamızda nasıl kullanabileceğimizden ve ön izleme ekranından uygulamamıza nasıl komut gönderebileceğimizi basitçe bahsetmiştim. Bu sefer de yine görev çubuğunda çalışan uygulamızdaki durumları, çeşitli görseller ile nasıl kullanıcıyı bilgilendirebileceğimizden bahsedeceğim. Windows 7&#8242;de, Windows Live Messenger&#8217;ın görev çubundaki görünümünü hatırlarsınız. WLM&#8217;deki durumunuza göre görev [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpf-4-0da-gorev-cubudhunda-icon-gosterimi%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpf-4-0da-gorev-cubudhunda-icon-gosterimi%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Önceki <a href="http://www.minepla.net/2010/01/wpf-4-0da-taskbar-thumbnail-ithlemleri/" target="_blank">yazımda</a> WPF 4.0&#8242;da Windows 7&#8242;nin görev çubuğundaki yeni özelliklerden ön izleme özelliğini kendi uygulamamızda nasıl kullanabileceğimizden ve ön izleme ekranından uygulamamıza nasıl komut gönderebileceğimizi basitçe bahsetmiştim. Bu sefer de yine görev çubuğunda çalışan uygulamızdaki durumları, çeşitli görseller ile nasıl kullanıcıyı bilgilendirebileceğimizden bahsedeceğim.</p>
<p>Windows 7&#8242;de, Windows Live Messenger&#8217;ın görev çubundaki görünümünü hatırlarsınız. WLM&#8217;deki durumunuza göre görev çubuğundaki &#8220;icon&#8221; da değişiyor.</p>
<p><a href="http://www.minepla.net/wp-content/uploads/busy.jpg"><img class="aligncenter size-full wp-image-918" title="busy" src="http://www.minepla.net/wp-content/uploads/busy.jpg" alt="" width="242" height="46" /></a><a href="http://www.minepla.net/wp-content/uploads/online.jpg"></a></p>
<p><a href="http://www.minepla.net/wp-content/uploads/online.jpg"><img class="aligncenter size-full wp-image-919" title="online" src="http://www.minepla.net/wp-content/uploads/online.jpg" alt="" width="242" height="46" /></a></p>
<p>Benzer bir işlemi kendi uygulamamızda yapmak WPF 4.0 ile çok kolay. Basit bir senaryo ile üzerinden geçersem, hem kullanım açısından fikir verir, hem de daha iyi anlaşılır sanırsam.</p>
<p>Basit bir mesajlaşma uygulaması senaryosu yaratalım. Uygulamamıza bir yerlerden mesaj geliyor olsun ve uygulamamız ile bu mesajları onaylıyor ve red edebiliyor olsun. Öncelikle arayüz için gerekli kodumuzu oluşturalım.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 37</span> &lt;Window x:Class=<span style="color: #a31515;">&#8220;ThumbNailDemo.MainWindow&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 38</span> xmlns=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 39</span> xmlns:x=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 40</span> Title=<span style="color: #a31515;">&#8220;MainWindow&#8221;</span> Height=<span style="color: #a31515;">&#8220;350&#8243;</span> Width=<span style="color: #a31515;">&#8220;525&#8243;</span>&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 41</span> &lt;Window.Resources&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 42</span> &lt;!&#8211; Görev çubuğunda gözükecek <span style="color: #a31515;">&#8220;icon&#8221;</span> &#8211;&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 43</span> &lt;DrawingImage x:Key=<span style="color: #a31515;">&#8220;imgMessage&#8221;</span>&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 44</span> &lt;DrawingImage.Drawing&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 45</span> &lt;ImageDrawing ImageSource=<span style="color: #a31515;">&#8220;email.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 46</span> Rect=<span style="color: #a31515;">&#8220;0,0,16,16&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 47</span> &lt;/DrawingImage.Drawing&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 48</span> &lt;/DrawingImage&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 49</span> &lt;/Window.Resources&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 50</span> &lt;Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 51</span> &lt;TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 52</span> &lt;TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 53</span> &lt;!&#8211; Onay düğmesi &#8211;&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 54</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;black.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 55</span> Description=<span style="color: #a31515;">&#8220;Apply&#8221;</span> Click=<span style="color: #a31515;">&#8220;ThumbButtonInfo_Click&#8221;</span> CommandParameter=<span style="color: #a31515;">&#8220;Apply&#8221;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 56</span> &lt;!&#8211;Ignore düğmesi&#8211;&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 57</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;green.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 58</span> Description=<span style="color: #a31515;">&#8220;Ignore&#8221;</span> Click=<span style="color: #a31515;">&#8220;ThumbButtonInfo_Click&#8221;</span> CommandParameter=<span style="color: #a31515;">&#8220;Ignore&#8221;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 59</span> &lt;/TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 60</span> &lt;/TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 61</span> &lt;/Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 62</span> &lt;Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 63</span> &lt;TextBlock x:Name=<span style="color: #a31515;">&#8220;txtInfo&#8221;</span> FontSize=<span style="color: #a31515;">&#8220;72&#8243;</span> TextAlignment=<span style="color: #a31515;">&#8220;Center&#8221;</span>&gt;&lt;/TextBlock&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 64</span> &lt;/Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 65</span> &lt;/Window&gt;</p>
</div>
<p>Kod tarafında da aşağıdaki kodları yazmamız gerekmekte.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 37</span> <span style="color: blue;">public</span> <span style="color: blue;">partial</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MainWindow</span> : <span style="color: #2b91af;">Window</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 38</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 39</span> <span style="color: blue;">private</span> BackgroundWorker _backgroundWorker;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 40</span> <span style="color: blue;">public</span> MainWindow()</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 41</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 42</span> InitializeComponent();</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 43</span> _backgroundWorker = <span style="color: blue;">new</span> BackgroundWorker();</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 44</span> _backgroundWorker.WorkerSupportsCancellation = <span style="color: blue;">true</span>;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 45</span> _backgroundWorker.WorkerReportsProgress = <span style="color: blue;">true</span>;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 46</span> _backgroundWorker.DoWork += <span style="color: blue;">new</span> DoWorkEventHandler(_backgroundWorker_DoWork);</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 47</span> _backgroundWorker.ProgressChanged += <span style="color: blue;">new</span> ProgressChangedEventHandler(_backgroundWorker_ProgressChanged);</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 48</span> _backgroundWorker.RunWorkerAsync();</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 49</span> }</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 50</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 51</span> <span style="color: blue;">void</span> _backgroundWorker_ProgressChanged(<span style="color: blue;">object</span> sender, ProgressChangedEventArgs e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 52</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 53</span> <span style="color: green;">//Görev çubuğuna ilgili &#8220;icon&#8221; u ekliyoruz.</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 54</span> TaskbarItemInfo.Overlay = (<span style="color: #2b91af;">ImageSource</span>)Resources[<span style="color: #a31515;">"imgMessage"</span>];</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 55</span> }</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 56</span> <span style="color: blue;">void</span> _backgroundWorker_DoWork(<span style="color: blue;">object</span> sender, DoWorkEventArgs e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 57</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 58</span> <span style="color: green;">//Sonradan mesaj gelmiş gibi simule etmek için Thread yardımını kullanıyoruz.</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 59</span> Thread.Sleep(6000);</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 60</span> _backgroundWorker.ReportProgress(100);</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 61</span> }</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 62</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 63</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 64</span> }</p>
</div>
<p>Yukarıdaki kod bloğunda uygulama çalıştıktan bir süre sonra uygulamanın görev çubuğundaki resmini değiştiriyoruz.Uygulamamızda bir değişiklik olduğu zaman, uygulama penceresi aktif olmasa bile bu değişiklikten haberdar olabiliyoruz bu sayede. <strong>TaskbarItemInfo.Overlay</strong> özelliğine verdiğimiz ImageSource&#8217;u ile nasıl bir görsel ile kullanıcıyı haberdar edebileceğimizi belirtmemiz yeterli.</p>
<p><a href="http://www.minepla.net/wp-content/uploads/nomessage.jpg"><img class="aligncenter size-full wp-image-921" title="nomessage" src="http://www.minepla.net/wp-content/uploads/nomessage.jpg" alt="" width="242" height="46" /></a><a href="http://www.minepla.net/wp-content/uploads/message.jpg"><img class="aligncenter size-full wp-image-920" title="message" src="http://www.minepla.net/wp-content/uploads/message.jpg" alt="" width="242" height="46" /></a></p>
<p>Şimdi önceki yazıda anlatmaya çalıştığım öz izleme penceresindeki düğmeler ile mesajı onaylıyalım ya da red edelim. Onaylayınca &#8220;icon&#8221; kaybolacak, red edince hiç bir şey olmayacak.:) Bu kadar basit bir senaryomuz var.</p>
<p><a href="http://www.minepla.net/wp-content/uploads/apply.jpg"><img class="aligncenter size-full wp-image-922" title="apply" src="http://www.minepla.net/wp-content/uploads/apply.jpg" alt="" width="249" height="246" /></a></p>
<p>Kod kısmına aşağıdaki gibi eklememizi yaptığımızda bu basit senaryomuz tamamlanmış olacak.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 62</span> <span style="color: blue;">private</span> <span style="color: blue;">void</span> ThumbButtonInfo_Click(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">EventArgs</span> e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 63</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 64</span> <span style="color: blue;">if</span> (sender <span style="color: blue;">is</span> ThumbButtonInfo)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 65</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 66</span> ThumbButtonInfo button = (ThumbButtonInfo)sender;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 67</span> <span style="color: blue;">if</span> (button.CommandParameter.ToString() == <span style="color: #a31515;">&#8220;Apply&#8221;</span>)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 68</span> TaskbarItemInfo.Overlay = <span style="color: blue;">null</span>;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 69</span> }</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 70</span> }</p>
</div>
<p>Basitçe .NET 4.0 ile WPF&#8217;e gelen yeni özellikleri anlatmaya çalıştım. Umarım biraz da olsa birşey oluşturmuştur akıllarda. Bu çok basit örneği çeşitlendirip, çok daha güzel özellikler ile uygulamalarımızı geliştirmek bizim elimizde. Haydi bakalım&#8230;:D</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2010/01/wpf-4-0da-gorev-cubudhunda-icon-gosterimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF 4.0&#8242;da &#8220;Taskbar ThumbNail&#8221; işlemleri&#8230;</title>
		<link>http://www.minepla.net/2010/01/wpf-4-0da-taskbar-thumbnail-ithlemleri/</link>
		<comments>http://www.minepla.net/2010/01/wpf-4-0da-taskbar-thumbnail-ithlemleri/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 19:48:32 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=913</guid>
		<description><![CDATA[Windows Vista ve Windows 7&#8242;de ki görev çubuğundaki  &#8221;Thumbnail&#8221;(önizleme) kavramı uygulamalarımıza yeni özellikler katmak adına güzel bir özellik olarak  karşımıza çıktı. Özellikle Windows 7&#8242;nin de yaygınlaşmaya başlaması &#8220;Thumbnail&#8221; ve &#8220;Jumplist&#8221; kavramlarını yazılımcılar olarak kendi uygulamalarımızda da kullanılabilir hale getirmemizi zorunlu hale getirecek gibi. .NET Framework için &#8220;Windows API Code Pack&#8221; ile bu özellikleri kısmen olarak [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpf-4-0da-taskbar-thumbnail-ithlemleri%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2010%2F01%2Fwpf-4-0da-taskbar-thumbnail-ithlemleri%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Windows Vista ve Windows 7&#8242;de ki görev çubuğundaki  &#8221;Thumbnail&#8221;(önizleme) kavramı uygulamalarımıza yeni özellikler katmak adına güzel bir özellik olarak  karşımıza çıktı. Özellikle Windows 7&#8242;nin de yaygınlaşmaya başlaması &#8220;Thumbnail&#8221; ve &#8220;Jumplist&#8221; kavramlarını yazılımcılar olarak kendi uygulamalarımızda da kullanılabilir hale getirmemizi zorunlu hale getirecek gibi.</p>
<p>.NET Framework için &#8220;<a href="http://code.msdn.microsoft.com/WindowsAPICodePack" target="_blank"><strong>Windows API Code Pack</strong></a>&#8221; ile bu özellikleri kısmen olarak kendi geliştirdiğimiz uygulamalarda kullanabilir hale gelmiştik.</p>
<p>.NET Framework 4.0 ile WPF&#8217;de bu özellikleri biraz daha verimli olarak kullanabilir hale geliyoruz. System.Windows.Shell, namespace&#8217;i bize bu özellikleri WPF tarafında kullanmamız için gerekli nesneleri ve metotları sağlıyor. İlk olarak kısaca ve basitçe TaskbarItemInfo sınıfından bahsediyor olacağım.</p>
<p>TaskbarItemInfo, bize WPF ile geliştirdiğimiz uygulamamızın görev çubuğundaki ön izleme özelliğini kullanabilmemizi sağlıyor.Ek olarak bu ön izleme ekranına çeşitli düğmeler ile yeni özellikler katabiliyoruz.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 28</span> &lt;Window x:Class=<span style="color: #a31515;">&#8220;ThumbNailDemo.MainWindow&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 29</span> xmlns=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 30</span> xmlns:x=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 31</span> Title=<span style="color: #a31515;">&#8220;MainWindow&#8221;</span> Height=<span style="color: #a31515;">&#8220;350&#8243;</span> Width=<span style="color: #a31515;">&#8220;525&#8243;</span>&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 32</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 33</span> &lt;Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 34</span> &lt;TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 35</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 36</span> &lt;TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 37</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;black.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 38</span> Description=<span style="color: #a31515;">&#8220;Button 1&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 39</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;blue.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 40</span> Description=<span style="color: #a31515;">&#8220;Button 2&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 41</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;green.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 42</span> Description=<span style="color: #a31515;">&#8220;Button 3&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 43</span> &lt;/TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 44</span> &lt;/TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 45</span> &lt;/Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 46</span> &lt;Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 47</span> &lt;TextBlock x:Name=<span style="color: #a31515;">&#8220;txtInfo&#8221;</span> FontSize=<span style="color: #a31515;">&#8220;72&#8243;</span> TextAlignment=<span style="color: #a31515;">&#8220;Center&#8221;</span>&gt;&lt;/TextBlock&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 48</span> &lt;/Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 49</span> &lt;/Window&gt;</p>
</div>
<p>Yukarıdaki kod örneğinde TaskbarItemInfo sınıfının &#8220;ThumbButtonInfos&#8221; özelliği ile ön izleme ekranımıza çeşitli düğmeler ekleyebiliyoruz. Uygulamamızı çalıştırdığımızda aşağıdaki gibi bir ön izleme ekranı bizi bekliyor olacak.</p>
<p style="text-align: center;"><a href="http://www.minepla.net/wp-content/uploads/wpf40_thumbnail1.jpg"><img class="aligncenter size-full wp-image-914" title="wpf40_thumbnail1" src="http://www.minepla.net/wp-content/uploads/wpf40_thumbnail1.jpg" alt="" width="523" height="392" /></a></p>
<p>Fark edeceğiniz üzere ön izleme ekranında 3 tane düğme ekrana eklenmiş durumda.Bu sayede uygulamamızı tam ekran açmadan, görev çubuğunda iken çeşitli komutlar vererek, bazı operasyonları çok daha hızlı yapabilir hale gelebiliyoruz.  Yukarıdaki kod bloğuna bir kaç ekleme ile bu düğmelere tıklandığı zaman çeşitli metotlar çalıştırabiliyoruz.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 28</span> &lt;Window x:Class=<span style="color: #a31515;">&#8220;ThumbNailDemo.MainWindow&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 29</span> xmlns=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 30</span> xmlns:x=<span style="color: #a31515;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 31</span> Title=<span style="color: #a31515;">&#8220;MainWindow&#8221;</span> Height=<span style="color: #a31515;">&#8220;350&#8243;</span> Width=<span style="color: #a31515;">&#8220;525&#8243;</span>&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 32</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 33</span> &lt;Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 34</span> &lt;TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 35</span> &lt;TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 36</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;black.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 37</span> Description=<span style="color: #a31515;">&#8220;Button 1&#8243;</span> <span style="color: #ff0000;">Click=</span><span style="color: #ff0000;">&#8220;ThumbButtonInfo_Click&#8221;</span><span style="color: #ff0000;"> CommandParameter=</span><span style="color: #ff0000;">&#8220;Button1&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 38</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;blue.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 39</span> Description=<span style="color: #a31515;">&#8220;Button 2&#8243;</span> <span style="color: #ff0000;">Click=</span><span style="color: #ff0000;">&#8220;ThumbButtonInfo_Click&#8221;</span><span style="color: #ff0000;"> CommandParameter=</span><span style="color: #ff0000;">&#8220;Button2&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 40</span> &lt;ThumbButtonInfo ImageSource=<span style="color: #a31515;">&#8220;green.png&#8221;</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 41</span> Description=<span style="color: #a31515;">&#8220;Button 3&#8243;</span> <span style="color: #ff0000;">Click=</span><span style="color: #ff0000;">&#8220;ThumbButtonInfo_Click&#8221;</span><span style="color: #ff0000;"> CommandParameter=</span><span style="color: #ff0000;">&#8220;Button3&#8243;</span> /&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 42</span> &lt;/TaskbarItemInfo.ThumbButtonInfos&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 43</span> &lt;/TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 44</span> &lt;/Window.TaskbarItemInfo&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 45</span> &lt;Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 46</span> &lt;TextBlock x:Name=<span style="color: #a31515;">&#8220;txtInfo&#8221;</span> FontSize=<span style="color: #a31515;">&#8220;72&#8243;</span> TextAlignment=<span style="color: #a31515;">&#8220;Center&#8221;</span>&gt;&lt;/TextBlock&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 47</span> &lt;/Grid&gt;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 48</span> &lt;/Window&gt;</p>
</div>
<p>Kod tarafında da aşağıdaki gibi basit bir metot ile düğmeye tıklandığı zaman yapmak istediğimiz şeyleri yapabiliriz.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 26</span> <span style="color: blue;">private</span> <span style="color: blue;">void</span> ThumbButtonInfo_Click(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">EventArgs</span> e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 27</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 28</span> <span style="color: blue;">if</span> (sender <span style="color: blue;">is</span> ThumbButtonInfo)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 29</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 30</span> ThumbButtonInfo button = (ThumbButtonInfo)sender;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 31</span> txtInfo.Text = button.Description;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 32</span> }</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 33</span> }</p>
</div>
<p>Oldukça basit bir şekilde .NET Framework 4.0 ve WPF ile Windows 7 &#8216;nin özelliklerini uygulamalarımızda kullanabilir hale geliyoruz. Artık belli bir senaryo dahilinde bu özellikleri kullanmak size kalmış. Ama biraz daha kurcalarsanız, bu konu ile ilgili çok daha fazla özelliğin .NET Framework 4.0 ile beraber geldiğini göreceksiniz.Şimdilik bu kadar&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2010/01/wpf-4-0da-taskbar-thumbnail-ithlemleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF&#8217;de &#8220;Routed Events&#8221;</title>
		<link>http://www.minepla.net/2009/12/wpfde-routed-events/</link>
		<comments>http://www.minepla.net/2009/12/wpfde-routed-events/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 22:22:25 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=825</guid>
		<description><![CDATA[Bir önceki yazımda WPF&#8217;de kontrol içerisindeki kontrollerde oluşan &#8220;event&#8221; sorunundan bahsetmiştim. Aslında sorun değil, WPF&#8217;deki &#8220;event&#8221; yaklaşımının biraz farklılaştığını belirtmeye çalışmıştım. Bu yazıda biraz daha derinlere girip, WPF&#8217;deki &#8220;Routed Events&#8221;&#8216;den bahsetmeye çalışacağım. WPF, kullanıcı deneyiminin uygulamalarda daha rahat bir şekilde uygulanmasını amaçlıyordu hatırlarsanız. WPF&#8217;in ortaya ilk çıktığından beri Microsoft&#8217;un altını çizdiği nokta bu yönde. Bu [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F12%2Fwpfde-routed-events%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F12%2Fwpfde-routed-events%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Bir önceki <strong><a href="http://www.minepla.net/2009/12/wpfde-selectionchanged-problemi/" target="_blank">yazımda</a></strong> WPF&#8217;de kontrol içerisindeki kontrollerde oluşan &#8220;event&#8221; sorunundan bahsetmiştim. Aslında sorun değil, WPF&#8217;deki &#8220;event&#8221; yaklaşımının biraz farklılaştığını belirtmeye çalışmıştım. Bu yazıda biraz daha derinlere girip, WPF&#8217;deki &#8220;Routed Events&#8221;&#8216;den bahsetmeye çalışacağım.</p>
<p>WPF, kullanıcı deneyiminin uygulamalarda daha rahat bir şekilde uygulanmasını amaçlıyordu hatırlarsanız. WPF&#8217;in ortaya ilk çıktığından beri Microsoft&#8217;un altını çizdiği nokta bu yönde. Bu bağlamda, standart bilgisayar uygulamalarında ki standart arayüzler yerine kullanıcının çok daha kolay kullanabileceği bir arayüz sunmak ve bu arayüz ile sunulan bilgileri de daha anlamlı bir görsellikte sunarak kullanıcı deneyimini uygulamalara katmak WPF&#8217;in ilerlediği yollardan bir tanesi diyebiliriz. Bu yaklaşımdan dolayı, WPF ile beraber alıştığımız kullanıcı kontrollerinden farklı bir yapı karşımıza çıkıyor. Tıkladığımız düğmeler WPF ile beraber daha farklı amaçlar için kullanılabilir hale geliyor. Ya da bir çok elemandan, seçim yapabileceğimiz kullanıcı kontrolleri içerik olarak daha anlamlı bilgiler içermeye başlıyor.</p>
<p>Mesela bir düğme(button)nin içine resim koyarak, düğmenin görselliğine farklı anlamlar yükleyebiliyoruz.Bu çok basit bir örnek oldu gerçi ama demek istediğim, WPF&#8217;de kullanıcı kontrollerini, farklılaştırarak zenginleştirebiliyoruz. Kontrolleri iç içe kullanabiliyoruz. Bir &#8220;button&#8221;(düğme) içine &#8220;image&#8221;(resim) kontrollü koymak gibi. Katmanlı bir kullanıcı kontrolü yapısı var demek biraz daha netleştirebilir belki.</p>
<p>&#8220;Routed Events&#8221; kavramı da bu yapıdan dolayı ortaya çıkıyor. Yukarıda bahsettiğim kontroller üzerinden örneklendirmek daha anlaşılır olacak sanırım. Aşağıdaki uyduruk resimde(:)) bir &#8220;button&#8221; içinde &#8220;image&#8221; var.</p>
<p style="text-align: center;"><a href="http://www.minepla.net/wp-content/uploads/routedEvents.jpg"><img class="alignnone size-full wp-image-827" title="routedEvents" src="http://www.minepla.net/wp-content/uploads/routedEvents.jpg" alt="" width="333" height="203" /></a></p>
<p>Şimdi &#8220;button&#8221;a tıklandığı zaman &#8220;click&#8221; olayı oluşur bildiğiniz üzere. Ve tıklandığı zaman ne olmasını istiyorsanız bu olaya(event) denk gelen metodda ilgili kodu yazarsınız. &#8220;button&#8221; tıklandığı zaman ne oluyorsa, aynı işlem üzerinde &#8220;image&#8221; kontrolü olan &#8220;button&#8221;a tıklandığında da olmalı. Tıklanan alan &#8220;image&#8221; kontrolüne denk geliyorsa tıklama işleminin &#8220;button&#8221; tarafından da anlaşılıyor olması lazım. Bundan dolayı &#8220;image&#8221; üzerinde bazı işlemlerin, &#8220;image&#8221;ı içeren kontroller tarafından da algılanabiliyor olması lazım. WPF bu işlemi &#8220;routed events&#8221; kavramı ile gerçekleştiriyor.<strong>Özetle WPF&#8217;de bir &#8220;event&#8221; başka elemanlara yönlendirilebiliyor.</strong></p>
<p>Bir önceki <strong><a href="http://www.minepla.net/2009/12/wpfde-selectionchanged-problemi/" target="_blank">yazıda</a></strong> gerçekleşen olayın sebebi bu yani. WPF&#8217;de bir uygulama geliştirirken, &#8220;routed events&#8221; kavramını kendi geliştireceğiniz kontrollerde kullanmanız kaçınılmaz olacaktır. İlerleyen yazılarda bununla ilgili çok basit bir örnek göstermeye çalışıyor olacağım&#8230;Şimdilik bu kadar.</p>
<p>Not: &#8220;button&#8221; ve &#8220;image&#8221; anlaşılır bir örnek olması açısından kullandığım kavramlar. WPF&#8217;deki mevcut tüm yapılar için &#8220;routed events&#8221; kavramı geçerlidir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/12/wpfde-routed-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF&#8217;de SelectionChanged problemi</title>
		<link>http://www.minepla.net/2009/12/wpfde-selectionchanged-problemi/</link>
		<comments>http://www.minepla.net/2009/12/wpfde-selectionchanged-problemi/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 09:48:40 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=820</guid>
		<description><![CDATA[Geçen gün bir arkadaşımın WPF(Windows Presentation Foundation)&#8217;den çektiği dertleri Twitter&#8217;dan gördüm ve benzer bir sorunu yaşadığım için şaşkınlığını çok iyi anladım. WPF kavram olarak çok güzel şeyler vaad ediyor olsa da, açıkcası tam olarak oturmuş bir yapı olduğuna inanmıyorum. İlk çıktığı zamandan beri kendimce küçük uğraşlar ile WPF&#8217;i elimden geldiğince takip etmeye öğrenmeye çalıştım,çalışıyorum da. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F12%2Fwpfde-selectionchanged-problemi%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F12%2Fwpfde-selectionchanged-problemi%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Geçen gün bir arkadaşımın WPF(Windows Presentation Foundation)&#8217;den çektiği dertleri Twitter&#8217;dan gördüm ve benzer bir sorunu yaşadığım için şaşkınlığını çok iyi anladım. WPF kavram olarak çok güzel şeyler vaad ediyor olsa da, açıkcası tam olarak oturmuş bir yapı olduğuna inanmıyorum. İlk çıktığı zamandan beri kendimce küçük uğraşlar ile WPF&#8217;i elimden geldiğince takip etmeye öğrenmeye çalıştım,çalışıyorum da. Diğer .NET Framework yapıları ile kıyaslandığında farklılıkları ve değişiklikler ciddi anlamda uğraştırıyor.Neyse çok dağıtmadan konuyu, özüne dönelim.</p>
<p>WPF&#8217;de &#8220;control&#8221; yapısı, ASP.NET ve Windows yapısına göre biraz daha farklı. Bu farklara değinmek şimdi uzayacağından sadece farklı olduğunun altını çizmek yeterli olacaktır şu aşamada.</p>
<p>Sorunumuz ne peki? TabControl içinde kullandığımız Listbox,Combobox gibi yapılarda &#8220;SelectionChanged&#8221; event&#8217;i(olayı) çalıştığı zaman tabcontrol&#8217;ün de &#8220;SelectionChanged&#8221; event&#8217;i çalışmakta.Bunun nedenlerini inceleyerek sorunu çözmek, WPF&#8217;i anlamak adına daha faydalı olacağından olayın en temeline inerek çözümü sunmaya çalışacağım.</p>
<p>WPF&#8217;de &#8220;<a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.aspx" target="_blank">Selector</a>&#8221; diye bir sınıf var. Listbox,Combobox gibi seçme işleminin yapılabileceği kullanıcı kontrolleri bu sınıftan türemekte.  &#8221;Select&#8221; operasyonunun yapılacağı kontrollerin &#8220;Selector&#8221;dan türemesi kavram olarak bakıldığında çok normal. WPF&#8217;de TabControl diye bildiğimiz sekmeli bir yapı sunan kontrolde WPF&#8217;de &#8220;Selector&#8221;dan türemekte.Yani ListBox,Combobox ve TabControl aynı kategoride diyebiliriz daha basitçe.Bu kontrollerin &#8220;SelectionChanged&#8221; event&#8217;i Selector sınıfından gelmekte ve dinlenmekte. TabControl&#8217;ün veya Combobox&#8217;ın ne yazık ki kendilerine özgü düzenlenmiş bir SelectionChanged event&#8217;i yok.Bundan dolayı &#8220;Selector.SelectionChanged&#8221; event&#8217;i tetiklendiği zaman Selector sınıfından türeyen sınıflarda bu event&#8217;i kontrol etmeye çalıştıklarında başarılı olacaklardır.Yani daha açık bir şekilde; TabControl&#8217;ün SelectionChanged event&#8217;inde çalışan bir metodu olduğunu varsayalım:</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 81</span> <span style="color: blue;">protected</span> <span style="color: blue;">void</span> TabControl1_SelectionChanged(<span style="color: blue;">object</span> sender, SelectionChangedEventArgs e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 82</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 83</span> <span style="color: green;">//tab seçildi</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 84</span> }</p>
</div>
<p>Aynı şekilde Tabcontrol&#8217;ün içindeki bir ComboBox&#8217;ın da aynı event&#8217;de çalışacak bir metodu olduğunu varsayalım:</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 86</span> <span style="color: blue;">protected</span> <span style="color: blue;">void</span> Combobox1_SelectionChanged(<span style="color: blue;">object</span> sender, SelectionChangedEventArgs e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 87</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 88</span> <span style="color: green;">//combox&#8217;da seçildi</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 89</span> }</p>
</div>
<p>Uygulama çalıştığı zaman ComboBox&#8217;dan bir seçim yaptığınızda, ComboBox&#8217;ı içeren kontrolün(TabControl oluyor bu durumda) de SelectionChanged olduğu zaman çalışacak metod da çalışacaktır&#8230;Çok ilginç değil mi? Bunun nedeni yukarıdaki kısa açıklama. Ama asıl nedeni WPF&#8217;de ki event mekanizması.WPF ile beraber Routed Events diye bir kavram hayatımıza giriyor.Bir sonraki yazımda bunun ne olduğunu anlatmaya çalışacağım, çünkü WPF ile uğraşanlar için oldukça önemli bir şey olduğuna inanıyorum.Neyse sorunumuza dönelim&#8230;Şimdi en son combobox&#8217;ı seçmiştik ve tab kontrolününde metodu çalışmıştı. Bunu istemiyoruz tabi ki&#8230;Peki ne yapacağız&#8230;</p>
<p>Event argümanlarının(e parametresi oluyor metoddaki) &#8220;Handled&#8221; diye bir özelliği var. Bu özelliği &#8220;true&#8221; olarak değiştirdiğiniz zaman oluşan olayı(event) yakalamış olduğumuzu belirtiyoruz.</p>
<div style="font-family: Courier New; font-size: 10pt; color: black; background: white;">
<p style="margin: 0px;"><span style="color: #2b91af;"> 86</span> <span style="color: blue;">protected</span> <span style="color: blue;">void</span> Combobox1_SelectionChanged(<span style="color: blue;">object</span> sender, SelectionChangedEventArgs e)</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 87</span> {</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 88</span> <span style="color: green;">//combox&#8217;da seçildi</span></p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 89</span> e.Handled = <span style="color: blue;">true</span>;</p>
<p style="margin: 0px;"><span style="color: #2b91af;"> 90</span> }</p>
</div>
<p>Bu sayede TabControl&#8217;ün event&#8217;i çalışmamış oluyor&#8230;WPF ile geliştirme yaparken, bu tarz sorunları aslında sorun olarak değilde, değişiklik olarak algılamak gerekiyor sanırım.Neyse şimdilik bu kadar&#8230;Her türlü soru,sorun,düşünce fikir paylaşımına açığım,bekliyorum&#8230;(:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/12/wpfde-selectionchanged-problemi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fishbowl ve Facebook</title>
		<link>http://www.minepla.net/2009/11/fishbowl-ve-facebook/</link>
		<comments>http://www.minepla.net/2009/11/fishbowl-ve-facebook/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 12:29:39 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=693</guid>
		<description><![CDATA[Microsoft, Facebook SDK ve WPF ile çok güzel bir uygulama ile Facebook&#8217;u masaüstümüze getirmiş. Açık olan kaynak kodları ile geliştiricilere çok güzel bir örnek. Mutlaka indirin deneyin derim&#8230;Biraz daha gaz vermesi adına aşağıda bir kaç resim var. Kaynak kod: http://fishbowl.codeplex.com/ Site: http://fishbowlclient.com/]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F11%2Ffishbowl-ve-facebook%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2009%2F11%2Ffishbowl-ve-facebook%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Microsoft, Facebook SDK ve WPF ile çok güzel bir uygulama ile Facebook&#8217;u masaüstümüze getirmiş. Açık olan kaynak kodları ile geliştiricilere çok güzel bir örnek. Mutlaka indirin deneyin derim&#8230;Biraz daha gaz vermesi adına aşağıda bir kaç resim var.</p>
<p>Kaynak kod: <a href="http://fishbowl.codeplex.com/">http://fishbowl.codeplex.com/</a></p>
<p>Site: <a href="http://fishbowlclient.com/">http://fishbowlclient.com/</a></p>
<p><a href="http://www.minepla.net/wp-content/uploads/fishbowl3.jpg"><img class="alignnone size-large wp-image-694" title="fishbowl3" src="http://www.minepla.net/wp-content/uploads/fishbowl3-1024x600.jpg" alt="fishbowl3" width="502" height="294" /></a></p>
<p><a href="http://www.minepla.net/wp-content/uploads/fishbowl2.jpg"><img class="alignnone size-large wp-image-695" title="fishbowl2" src="http://www.minepla.net/wp-content/uploads/fishbowl2-1024x600.jpg" alt="fishbowl2" width="502" height="294" /></a></p>
<p><a href="http://www.minepla.net/wp-content/uploads/fishbowl1.jpg"><img class="alignnone size-large wp-image-697" title="fishbowl1" src="http://www.minepla.net/wp-content/uploads/fishbowl1-1024x600.jpg" alt="fishbowl1" width="502" height="294" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2009/11/fishbowl-ve-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF ve DataBinding</title>
		<link>http://www.minepla.net/2007/11/wfp-ve-databinding/</link>
		<comments>http://www.minepla.net/2007/11/wfp-ve-databinding/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 18:32:12 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=106</guid>
		<description><![CDATA[.NET Framework 3.0 ile beraber gelen alt bileşenlerden Windows Presentation Foundation uzaktan güzel gözüksede sanırım uygulama geliştirme aşamasında bir çok yazılım uzmanını zorlayan yapılardan biri. Bunun öncelikli nedenleri, henüz stabil bir uygulama geliştirme platformunun tam olarak sunulmaması ve dökümantasyonun yeterli olmaması gösterilebilir sanırım. WPF vizyonu yaygınlaştıkca dökümantasyon olayınında gelişeceğine inanıyorum.   Bu yazımda WPF’da databinding [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2007%2F11%2Fwfp-ve-databinding%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2007%2F11%2Fwfp-ve-databinding%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>.NET Framework 3.0 ile beraber gelen alt bileşenlerden Windows Presentation Foundation uzaktan güzel gözüksede sanırım uygulama geliştirme aşamasında bir çok yazılım uzmanını zorlayan yapılardan biri. Bunun öncelikli nedenleri, henüz stabil bir uygulama geliştirme platformunun tam olarak sunulmaması ve dökümantasyonun yeterli olmaması gösterilebilir sanırım. WPF vizyonu yaygınlaştıkca dökümantasyon olayınında gelişeceğine inanıyorum.<br />
 <br />
Bu yazımda WPF’da databinding işlemlerinden bahsedeceğim. Önceki framework versiyonlarından farklı bir yaklaşıma sahip olan databinding işlemleri WPF’da gerçekten oldukça karışık. Bunun nedenlerinden biri kontrolleri bir birleri ile iç içe kullanabilme özelliğinin ve her bir kontrolü özelleştirme esnekliliğinin çok gelişmiş olması desem yanılmış olmam. WPF’da bir listbox’ın içine koyacağınız düğme üzerine tıklandığı zaman bir combobox’ın çıkıp,elemanlarını değişik türlerde gösterebilme esnekliği, geliştirme aşamasında baya zorluyor.</p>
<p>Bu yazı ile bu WPF’de kontrollere databinding nasıl yapılır giriş seviyesinde bunu anlatacağım. Yazının biraz daha net anlaşılması için XAML kavramı ve .NET Framework 3.0 konseptine yatkınlın sanırım gerekli olacaktır. Yapacağım örnek, bir combobox’ı database’den gelen bilgiler ile nasıl doldurabilir ve combobox’ın elemanlarını nasıl özelleştirebiliriz bunu gösteren basit bir uygulama olacak.</p>
<p><span id="more-106"></span></p>
<p>Öncelikle yeni proje olarak bir WPF Application açıyoruz. Aşağıdaki gibi bir kod parçası ilk karşımıza çıkan şey oluyor.</p>
<p><a class="imagelink" title="1.JPG" href="http://www.minepla.net/wp-content/uploads/1.JPG"><img id="image96" src="http://www.minepla.net/wp-content/uploads/1.JPG" alt="1.JPG" /></a></p>
<p>Şu aşamada tag’ına gerek yok. Bu yüzden onla ilgi tag’ları silebiliriz. Şu an elimizde sadece bir uygulamanın penceresi var. tagını kodumuza ekliyoruz. Yapacağımız basit uygulamada diğer alt kontrolleri bu canvas kontrolüne ekleyeceğiz.Canvas’ı ekledikten sonra bir combobox’ı da bu Canvas’ın içine ekliyoruz. Bu işlemleri toolbox’dan kontrolleri sürekleyip bırakarak yapabileceğiniz gibi aşağıdaki kodu yazarakta bu işlemleri yapabilirsiniz.</p>
<p><a class="imagelink" title="2.JPG" href="http://www.minepla.net/wp-content/uploads/2.JPG"><img id="image97" src="http://www.minepla.net/wp-content/uploads/2.JPG" alt="2.JPG" /></a></p>
<p>Şu aşamaya kadar daha hiç bir data işlemi yapmadık. Uygulamanın eli yüzü biraz daha düzgün olsun diye combobox’ın yanına bir label ekleyerek combobox’ın neyi barındıracağını belli edebiliriz.</p>
<p><a class="imagelink" title="3.JPG" href="http://www.minepla.net/wp-content/uploads/3.JPG"><img id="image98" src="http://www.minepla.net/wp-content/uploads/3.JPG" alt="3.JPG" /></a></p>
<p>Şimdi combobox’da gösterilecek elemanlarının nasıl görüntüleneceğini belirliyeceğiz.Bunun için DataTemplate nesnesini kullanacağız. Bu işlemi hem kod tarafında,hem XAML tarafında yapabiliriz. Ama XAML tarafında yapmak çok daha basit ve mantıklı olacaktır. DataTemplate nesnesi ile combobox’da ki elemanların nasıl gösterileceğini belirteceğiz. Bu aşamada WPF’in görsel olarak ne kadar esnek olabileceğini görebiliyoruz. Çünkü DataTemplate içine yazacağımız başka kontroller ile combobox’ın elemanlarını temsil edebiliyor olacağız. DataTemplate’in içinde belirtebileceğimiz bir button kontrolü ile combobox’ın tüm elemanlarının birer button olmasını sağlayabiliyoruz. Bunun için Canvas kontrolü içerisinde Resources kısmına DataTemplate ekliyoruz.</p>
<p><a class="imagelink" title="4.JPG" href="http://www.minepla.net/wp-content/uploads/4.JPG"><img id="image99" src="http://www.minepla.net/wp-content/uploads/4.JPG" alt="4.JPG" /></a></p>
<p>Peki bu Resources olayı ne? Resource,kontrollerin içerisinde bulunan kontrolleri özelleştirmek,DataTemplate,Style gibi özellikleri belirlemek için faydalanacağımız kısım.İlerleyen yazılarda Resources kısmından ayrıntılı olarak bahsedeceğim. Combobox’ımızdaki elemanların nasıl gösterileceğini belirteceğimiz DataTemplate’i, Canvas.Resources kısmına ekliyoruz. Bu aşamada x:Key:”ComboboxItemTemplate” kısmı çok önemli,çünkü bu template’i tanımlamalıyız ki ComboBox’ımız kullanabilsin. DataTemplate içerisinde yazacağımız her kod, dataların nasıl görüntüleceğini belirleyecek. İstediğimiz kodu koyabileceğimiz için istediğimiz gibi de veriyi sunabileceğiz.Bu örnekte Grid formatında bir gösterim yapacağız. Ürün resmi,ürün adı,ürün alt kategorisi,ürün kategorisi şeklinde kategoriler ile ürünleri combobox’ın içinde göstereceğiz.</p>
<p><a class="imagelink" title="5.JPG" href="http://www.minepla.net/wp-content/uploads/5.JPG"><img id="image100" src="http://www.minepla.net/wp-content/uploads/5.JPG" alt="5.JPG" /></a></p>
<p>Evet şuan görsel olarak kısmen her şey hazır.Combobox’ı ekledik, DataTemplate’i yarattık. Şimdi combobox’ın bu DataTemplate’i kullanacağını belirtmemiz lazım. Bunu ItemTemplate özelliğini kullanarak combobox kontrolüne belirtiyoruz.Bunu yaparak combobox elemanlarının DataTemplate’deki yapıda gösterileceğini tanımlıyoruz.</p>
<p><a class="imagelink" title="6.JPG" href="http://www.minepla.net/wp-content/uploads/6.JPG"><img id="image101" src="http://www.minepla.net/wp-content/uploads/6.JPG" alt="6.JPG" /></a></p>
<p>Görsel olarak hemen hemen her şey tamamlandı. Artık kod tarafında verilerin bu kontrollere aktarılması kaldı. Bunun için basit bir fonksiyon yazıyoruz.DataTable döndüren bu fonksiyon ile Database’den verileri alıyoruz.</p>
<p><a class="imagelink" title="7.JPG" href="http://www.minepla.net/wp-content/uploads/7.JPG"><img id="image102" src="http://www.minepla.net/wp-content/uploads/7.JPG" alt="7.JPG" /></a></p>
<p>Ben GetAllProducts diye aşağıdaki SP’yi yarattım,siz kendi sorgunuz ile istediğiniz şekilde veriyi çekebilirsiniz.</p>
<p><a class="imagelink" title="8.JPG" href="http://www.minepla.net/wp-content/uploads/8.JPG"><img id="image103" style="width: 554px; height: 220px;" src="http://www.minepla.net/wp-content/uploads/8.JPG" alt="8.JPG" width="554" height="220" /></a></p>
<p>Bu fonksiyon ile dönen DataTable’i yaratmış olduğumuz combobox kontrolüne bind etmemiz gerekmekte. Bunun için aşağıdaki gibi bir kod parçası kullanıyoruz.<br />
<a class="imagelink" title="9.JPG" href="http://www.minepla.net/wp-content/uploads/9.JPG"><img id="image104" src="http://www.minepla.net/wp-content/uploads/9.JPG" alt="9.JPG" /></a></p>
<p>DataBind işlemlerini Binding nesnesini kullanarak gerçekleştiriyoruz.Şimdilik Binding nesnesinin Source özelliği bizim için yeterli olacaktır.Source ile hangi veri kaynağını bind edeceğimizi belirliyoruz. Daha sonra combobox’ın SetBinding() methodu ile bu Binding nesnesini ve ne tür bir binding işlemi gerçekleşecek bunu combobox’a bildiriyoruz. ComboBox.ItemSourceProperty ile binding işleminin elemanlar için gerçekleşeceğini söylüyoruz.Intellisence’den bakarsanız ComboBox için bir çok dependency özelliği görebilirsiniz. Peki ne demek bu? Combobox’ın bir çok özelliğine veri bağlayabiliyorsunuz. İlerleyen yazılarda bu konuyu biraz daha açacağım.</p>
<p>Evet,artık şimdi her şey tamam.ComboBox’ı yarattık,verilerin nasıl gözükeceğini tasarladık, verileri combobox’a bağladık.Ama küçük bir şey daha kaldı,o da hangi verilerin gözükeceğini belirtmek. Bunun için DataTemplate’deki kontrollere Binding işlemi sonucunda hangi verileri göstericeklerini belirtmek.</p>
<p><a class="imagelink" title="10.JPG" href="http://www.minepla.net/wp-content/uploads/10.JPG"><img id="image105" src="http://www.minepla.net/wp-content/uploads/10.JPG" alt="10.JPG" /></a></p>
<p>Dikkat ederseniz kullandığımız kontrollere &#8220;{Binding Path=SubCategory}&#8221; şeklinde bağlayacağım verileri ekledik. TextBlock kontrolünün Text özelliğine ürün ismini bağlamak gibi. Uygulamamızı çalıştırdığımız zaman aşağıdaki gibi bir sonuç elde etmiş olacağız.<br />
Dikkat ederseniz standart combobox yapısından çok farklı bir şekilde, verileri combobox’da görüntüledik.DataTemplate ile, sadece XAML tarafında yapacağınız küçük değişiklikler ile bu tasarımları çok rahat bir şekilde değiştirmeniz mümkün olacaktır.</p>
<p>Umarım giriş için yeterli ve yol gösteren bir yazı olmuştur.İlerleyen yazılarda,başka konularla WPF’i biraz daha karıştıracağım&#8230;</p>
<p>Kaynak kodu SkyDrive Beta&#8217;daki hesabıma koyuyorum. <a href="http://cid-f66549bc9e13f731.skydrive.live.com/browse.aspx/Code">http://cid-f66549bc9e13f731.skydrive.live.com/browse.aspx/Code</a> buradan ulaşabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2007/11/wfp-ve-databinding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF/E artık Silverlight</title>
		<link>http://www.minepla.net/2007/05/wpfe-artyk-silverlight/</link>
		<comments>http://www.minepla.net/2007/05/wpfe-artyk-silverlight/#comments</comments>
		<pubDate>Tue, 15 May 2007 09:58:01 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=61</guid>
		<description><![CDATA[Daha önceki yazılarımda bashettiğim WPF/E artık Silverlight olarak kullanıma sunuldu. Web 2.0 kavramının sadece Ajax teknolojisi olmadığının, gittikçe genişleyen bir konsept olduğunun sanırım en büyük örneklerinden biri bu Silverlight ve benzeri yenilikler. Silverlight ile ilgili daha geniş bilgi için http://msdn2.microsoft.com/en-us/silverlight/default.aspx]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2007%2F05%2Fwpfe-artyk-silverlight%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2007%2F05%2Fwpfe-artyk-silverlight%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Daha önceki <a href="http://www.minepla.net/?p=47">yazılarımda</a> bashettiğim WPF/E artık Silverlight olarak kullanıma sunuldu. Web 2.0 kavramının sadece Ajax teknolojisi olmadığının, gittikçe genişleyen bir konsept olduğunun sanırım en büyük örneklerinden biri bu Silverlight ve benzeri yenilikler.</p>
<p>Silverlight ile ilgili daha geniş bilgi için <a href="http://msdn2.microsoft.com/en-us/silverlight/default.aspx">http://msdn2.microsoft.com/en-us/silverlight/default.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2007/05/wpfe-artyk-silverlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WPF/E</title>
		<link>http://www.minepla.net/2006/12/wpfe/</link>
		<comments>http://www.minepla.net/2006/12/wpfe/#comments</comments>
		<pubDate>Sun, 17 Dec 2006 13:12:33 +0000</pubDate>
		<dc:creator>Arda</dc:creator>
				<category><![CDATA[Kavanoz]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.minepla.net/?p=47</guid>
		<description><![CDATA[WPF/E ( Windows Presentation Foundation/Everywhere) kod adında yeni bir plugin yayınladı. Teknik olarak bir plugin ancak bu plugin’nin arkasında büyük kavramlar yatıyor. WPF ile görsellikte yeni bir kapı açan Microsoft, WPF/E ile bazı eksiklikleri kapatmayı planlıyor. WPF ile yapılan browser application’lar platform bağlılığı yaratıyordu ve web’in bazı standartlarına uygun değildi. En basitinden WPF ile geliştirdiğiniz [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float:right; margin-left: 10px;margin-right:10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.minepla.net%2F2006%2F12%2Fwpfe%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.minepla.net%2F2006%2F12%2Fwpfe%2F&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>WPF/E ( Windows Presentation Foundation/Everywhere) kod adında yeni bir plugin yayınladı. Teknik olarak bir plugin ancak bu plugin’nin arkasında büyük kavramlar yatıyor. WPF ile görsellikte yeni bir kapı açan Microsoft, WPF/E ile bazı eksiklikleri kapatmayı planlıyor. WPF ile yapılan browser application’lar platform bağlılığı yaratıyordu ve web’in bazı standartlarına uygun değildi. En basitinden WPF ile geliştirdiğiniz bir browser application’ını başka platformlarda çalıştırırken sorun yaşıyordunuz. Bu hem WPF’nin browser applicationları tarafındaki eksikliğiydi.Ancak WPF/E ile bu platform bağımlılığı kalkıyor ve web tarafında FLASH’e alternatif, hatta bence ileride FLASH’in yerini alabilecek bir kavram ortaya çıkıyor.</p>
<p>WPF/E, web tarafında interaktif uygulamalar sunmanızı sağlayan bir konsept.WPF bir alt kümesi demek çok yanlış olmaz. Alt yapısında .NET 3.0, ASP.NET ATLAS ve JavaScript’in güçlerini birleştirdiği bir mimari var. XAML olayının esnekliği ve kolaylığı web tarafında da oldukça etkileyici görsellikler sunmanızı sağlıyor.</p>
<p>Öncelikle bir kaç link paylaşmak istiyorum ki bazı şeyler daha anlaşılır olsun. Öncelikle <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A3E29817-F841-46FC-A1D2-CEDC1ED5C948&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyId=A3E29817-F841-46FC-A1D2-CEDC1ED5C948&amp;displaylang=en</a> adresinden WPF/E’nin December CTP’sini download etmeniz gerekiyor. Bu nasıl browser’ınızda flash animasyonlarını görebilmek için bir şey yüklemeniz gerekiyorsa o tarz oldukça küçük bir dosya. Ancak baştan hatırlamak istiyorum, bu CTP 18 Şubat 2007’ye de bitecek. Bu küçük download’u yaptıktan sonra <a href="http://channel9.msdn.com/playground/wpfe/PageTurn/default.html">http://channel9.msdn.com/playground/wpfe/PageTurn/default.html </a>adresindeki WPF/E örneğini görebilirsiniz.</p>
<p>Eminim bu üstteki linkleri ziyaret ettikten sonra olaya bakış açınız değişecek. 2007’nin ortalarında tam olarak çıkması planlanan WPF/E şimdiden örnekleri ve çalışmalarıyla baya bir merak uyandıran bir kavram.Bakalım ileride daha neler olacak.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.minepla.net/2006/12/wpfe/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
