<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Daron Yöndem</title>
    <link>http://daron.yondem.com/tr/</link>
    <description>bir yazılımcının tasarıları...</description>
    <language>en-us</language>
    <copyright>Daron Yöndem</copyright>
    <lastBuildDate>Fri, 03 Jul 2009 15:16:38 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7174.0</generator>
    <managingEditor>daron@yondem.com</managingEditor>
    <webMaster>daron@yondem.com</webMaster>
    <creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/daronyondem" type="application/rss+xml" /><feedburner:emailServiceId>daronyondem</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Silverlight içerisinde veri validasyonu konusunda validasyon kontrollerimiz yok gibi
gözükse de aslında arka planda işimize yarayabilecek ilginç bir sistem var. Bu sistemi
hem tasarımcı hem de yazılımcı beraber kullanırlarsa ortaya çok güzel sonuçlar çıkabilir.
Bu yazımızda nesne bazlı veri validasyonunu nasıl yapabiliriz konusuna göz atacağız.
</p>
        <p>
Hemen örneğimize başlama yoluna uygulamamızın ekranına bir DataGrid koyalım. Bir sonraki
adımda uygun nesneleri yaratarak bu Grid'e bağlayacağız sonrasında da Grid içerisinde
hücre başına validasyon yapmaya çalışacağız.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">data</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
       <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication81.MainPage"</span><span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="myGrid"&gt;&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Görsel tarafı en azından şimdilik hallettiğimize göre hemen veri tarafına geçip işimizi
görecek kadar örnek veri yaratalım. İlk olarak verimiz içerisinde her nesneyi tanımlayacak
olan Urun sınıfını hazırlıyoruz.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Public</span><span style="color: blue;">Class</span> Urun
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Private</span> PAdi <span style="color: blue;">As</span><span style="color: blue;">String</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Public</span><span style="color: blue;">Property</span> Adi() <span style="color: blue;">As</span><span style="color: blue;">String</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
                <span style="color: blue;">Return</span> PAdi
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Set</span>(<span style="color: blue;">ByVal</span> value <span style="color: blue;">As</span><span style="color: blue;">String</span>)
</p>
        <p style="margin: 0px;">
                PAdi =
value
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Set</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">End</span><span style="color: blue;">Property</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Private</span> PSatis <span style="color: blue;">As</span><span style="color: blue;">Integer</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Public</span><span style="color: blue;">Property</span> Satis() <span style="color: blue;">As</span><span style="color: blue;">Integer</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
                <span style="color: blue;">Return</span> PSatis
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Set</span>(<span style="color: blue;">ByVal</span> value <span style="color: blue;">As</span><span style="color: blue;">Integer</span>)
</p>
        <p style="margin: 0px;">
                PSatis
= value
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Set</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">End</span><span style="color: blue;">Property</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Class</span></p>
        <p>
Göreceğiniz üzere <strong>Urun</strong> sınıfının sadece iki tane Property'si
var. Bunlardan biri ürünün adını taşırken diğeri ise toplam satış rakamını taşıyacak.
Bu sınıfımızdan bir liste yaratarak rastgele urunler ekleyip Grid'imize basit
bir şekilde bağlayacağız.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> MainPage_Loaded(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.RoutedEventArgs) <span style="color: blue;">Handles</span><span style="color: blue;">Me</span>.Loaded
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> Liste <span style="color: blue;">As</span><span style="color: blue;">New</span> List(<span style="color: blue;">Of</span> Urun)
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">For</span> index <span style="color: blue;">As</span><span style="color: blue;">Integer</span> =
1 <span style="color: blue;">To</span> 10
</p>
        <p style="margin: 0px;">
            Liste.Add(<span style="color: blue;">New</span> Urun() <span style="color: blue;">With</span> {.Adi
= <span style="color: #a31515;">"Ürün Adi"</span> &amp; index,
.Satis = Rnd() * 50})
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Next</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        myGrid.ItemsSource = Liste
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
Bütün bu manzara içerisinde bir anda aklınızda "ürün isimleri boş bırakılmasın"
şeklinde bir validasyon geldiğini varsayalım. Peki ne yapacağız? Aslında konu tahmin
edeceğinizden çok daha basit. İlk olarak validasyon işlemini yapabileceğimiz basit
bir yer var, orası da <strong>Urun</strong> sınıfımızın Property'lerinin <strong>Set</strong> durumu. 
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
       <span style="color: blue;">Private</span> PAdi <span style="color: blue;">As</span><span style="color: blue;">String</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Public</span><span style="color: blue;">Property</span> Adi() <span style="color: blue;">As</span><span style="color: blue;">String</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
                <span style="color: blue;">Return</span> PAdi
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Get</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Set</span>(<span style="color: blue;">ByVal</span> value <span style="color: blue;">As</span><span style="color: blue;">String</span>)
</p>
        <p style="margin: 0px;">
                <span style="color: blue;">If</span><span style="color: blue;">String</span>.IsNullOrEmpty(value) <span style="color: blue;">Then</span></p>
        <p style="margin: 0px;">
                    <span style="color: blue;">Throw</span><span style="color: blue;">New</span> ValidationException(<span style="color: #a31515;">"isim
boş geçilemez!"</span>)
</p>
        <p style="margin: 0px;">
                <span style="color: blue;">Else</span></p>
        <p style="margin: 0px;">
                   
PAdi = value
</p>
        <p style="margin: 0px;">
                <span style="color: blue;">End</span><span style="color: blue;">If</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">End</span><span style="color: blue;">Set</span></p>
        <p style="margin-top: 0px;">
        <span style="color: blue;">End</span><span style="color: blue;">Property</span></p>
        <p>
Yukarıdaki kod içerisinde sadece tek bir Property'nin set ve get durumunu görüyorsunuz.
İlk baştaki örneğimizden farklı olarak <strong>Set</strong> işleminde gelen value'yu
kontrol ediyoruz. Eğer Grid içerisinde bu Property'e denk gelen TextBox boş bırakılırsa
doğan olarak arka tarafa grid boş değer döndürerek söz konusu nesnenin property'sini
değiştirmeye çalışacak. İşte tam da o notkada devreye girip kontrolleri yapıp gerekiyorsa
bir <strong> ValidationException</strong> fırlatıyoruz. Exception fırlatırken kullanıcıya
vermek istediğimiz mesajı da parametre olarak constructor'a geçebiliriz. 
</p>
        <p>
Eğer projeyi bu hali ile Debug modunda açarsanız hatayı Debug tarafında görürsünüz.
Oysa projeyi Debug mode yerine normal şekilde çalıştırırsanız aşağıdaki manzara ile
karşılaşacaksınız.
</p>
        <p align="center">
          <img border="1" alt="Basit bir validasyon sonucu..." height="342" src="http://daron.yondem.com/tr/content/binary/03072009_1.png" width="411" />
          <br />
          <em>Basit bir validasyon sonucu...</em>
        </p>
        <p>
Gördüğünüz gibi manzara gerçekten çok hoş. Görsel olarak da güzel bir animasyon ile
sahneye gelen bu tooltip çoğu validasyon ihtiyacınızı giderecektir. Grid içerisinde
herhangi bir ek işleme gerek kalmadan validasyonu çalışır hale getirmiş olsak da farklı
kontrollerde Binding ayarlarken vermeniz gereken ek parametreler de mevcut.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">data</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
       <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication81.MainPage"</span><span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="myGrid"</span>
          <span style="color: red;"> AutoGenerateColumns</span>
          <span style="color: blue;">="False"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid.Columns</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGridTemplateColumn</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGridTemplateColumn.CellTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DataTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBox</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Adi</span>
          <span style="color: blue;">}"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DataTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGridTemplateColumn.CellTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGridTemplateColumn</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid.Columns</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Gridimizi yukarıdaki şekli ile biraz değiştirdik. Artık DataGrid ile beraber gelen
hazır kolonları değil de özel kolon tasarımlarını kullandığımızı düşünelim. Bizim
örneğimizde sadece Adi kolonunu ekledik ve bu kolonun tasarımına da bir TextBox koyduk.
Böylece bu kolon sürekli TextBox olarak gözükecek. Peki acaba bu TextBox'ı da
boş bıraktığımızda validasyon hatasını görebilecek miyiz? Maalesef hayır.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">&lt;UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray">       </span>
          <span style="color: gray;"> x:Class="SilverlightApplication81.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray">       </span>
          <span style="color: gray;"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">    &lt;Grid x:Name="LayoutRoot"
Background="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">        &lt;data:DataGrid
x:Name="myGrid" AutoGenerateColumns="False"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">           
&lt;data:DataGrid.Columns&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">           
    &lt;data:DataGridTemplateColumn&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">           
        &lt;data:DataGridTemplateColumn.CellTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DataTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBox</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Mode</span>
          <span style="color: blue;">=TwoWay,</span>
          <span style="color: red;"> NotifyOnValidationError</span>
          <span style="color: blue;">=true,</span>
          <span style="color: red;"> Path</span>
          <span style="color: blue;">=Adi,</span>
          <span style="color: red;"> ValidatesOnExceptions</span>
          <span style="color: blue;">=true}"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DataTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
        &lt;/data:DataGridTemplateColumn.CellTemplate&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
    &lt;/data:DataGridTemplateColumn&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
&lt;/data:DataGrid.Columns&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">        &lt;/data:DataGrid&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">    &lt;/Grid&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: #808080;">&lt;/UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Bu noktada değiştirmemiz gereken şey Binding mekanizmamızla alakalı ayarlar. İlk olarak <strong>Mode'u</strong><strong>TwoWay</strong> yaparak
buradaki değişikliklerin de nesne tarafına yansımasını sağlıyoruz ki nesne tarafındaki
validasyon gerçekleşsin. Ayrıca <strong>NotifyOnValidationError</strong> ve <strong>ValidatesOnExceptions</strong> özelliklerini
de <strong>True</strong> yaparak gerekli hataların gösterilmesini sağlıyoruz.
</p>
        <p align="center">
          <img border="1" alt="Özel binding ile validasyon." height="342" src="http://daron.yondem.com/tr/content/binary/03072009_2.png" width="404" />
          <br />
          <em>Özel binding ile validasyon.</em>
        </p>
        <p style="color:maroon;">
          <strong>Görselliği değiştirelim...</strong>
        </p>
        <p>
Herhangi bir kontrolün validation işlemi sonrasında InValid olması haline gösterilmek
üzere InValid State'lerinin bulunması gerekir. Hali hazırda Silverlight içerisindeki
çoğu kontrolde bu state'ler zaten hazır ve tasarımları yapılmış durumda. Eğer
yukarıdaki örneğimizi Expression Blend ile açar ve TextBox'ın Template'ini
editlemek isterseniz söz konusu menüde "<strong>Edit a copy</strong>" demeyi
unutmayın. 
</p>
        <p align="center">
          <img border="1" alt="TextBox kontolümüzü Template'ini kopyalayarak editleyelim." height="432" src="http://daron.yondem.com/tr/content/binary/03072009_3.png" width="389" />
          <br />
          <em>TextBox kontolümüzü Template'ini kopyalayarak editleyelim.</em>
        </p>
        <p>
Böylece Blend sizin yerinize standart şablonu kopyalayacaktır. Bunu yaptıktan sonra
söz konusu şablonun için VisualStateManager'da <strong>InValid</strong> statelerini
bulabilir ve bu stateler için hazırlanmış tasarımları değiştirebilirsiniz.
</p>
        <p align="center">
          <img border="1" alt="Blend içerisinde TextBox'a ait ayrı stateler..." height="210" src="http://daron.yondem.com/tr/content/binary/03072009_4.png" width="634" />
          <br />
          <em>Blend içerisinde TextBox'a ait ayrı stateler...</em>
        </p>
        <p>
State'ler arası tasarımları değiştirdikten sonra büyük ihtimal ile InValid durumunde
gösterilen Tooltip'in de tasarımını değiştirebilmek isteyeceksiniz. Blend içerisinden
şu an için (Blend 3 MIX Preview sürümü) bir çözüm bulunmasa da kod tarafından gerekli
özelleştirmeleri yapabiliriz. Textbox'ımızın Template'inden bir kopya alıp
editlerken aslında beraberindeki Tooltip'in tasarımının da bir kopyası uygulamamızın
sayfasında <strong>Resource</strong> olarak saklanıyor. 
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">&lt;UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray">       </span>
          <span style="color: gray;"> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray">       </span>
          <span style="color: gray;"> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray">       </span>
          <span style="color: gray;"> x:Class="SilverlightApplication81.MainPage"
Width="400" Height="300" mc:Ignorable="d"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl.Resources</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ControlTemplate</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Key</span>
          <span style="color: blue;">="ValidationToolTipTemplate"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Root"</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="5,0"</span>
          <span style="color: red;"> Opacity</span>
          <span style="color: blue;">="0"</span>
          <span style="color: red;"> RenderTransformOrigin</span>
          <span style="color: blue;">="0,0"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateManager.VisualStateGroups</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateGroup</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="OpenStates"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateGroup.Transitions</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualTransition</span>
          <span style="color: red;"> GeneratedDuration</span>
          <span style="color: blue;">="0"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualTransition</span>
          <span style="color: red;"> GeneratedDuration</span>
          <span style="color: blue;">="0:0:0.2"</span>
          <span style="color: red;"> To</span>
          <span style="color: blue;">="Open"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: red;"> Storyboard.TargetName</span>
          <span style="color: blue;">="xform"</span>
          <span style="color: red;"> Storyboard.TargetProperty</span>
          <span style="color: blue;">="X"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SplineDoubleKeyFrame</span>
          <span style="color: red;"> KeyTime</span>
          <span style="color: blue;">="0:0:0.2"</span>
          <span style="color: red;"> Value</span>
          <span style="color: blue;">="0"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: red;"> Storyboard.TargetName</span>
          <span style="color: blue;">="Root"</span>
          <span style="color: red;"> Storyboard.TargetProperty</span>
          <span style="color: blue;">="Opacity"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SplineDoubleKeyFrame</span>
          <span style="color: red;"> KeyTime</span>
          <span style="color: blue;">="0:0:0.2"</span>
          <span style="color: red;"> Value</span>
          <span style="color: blue;">="1"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualTransition</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateGroup.Transitions</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualState</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Closed"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: red;"> Storyboard.TargetName</span>
          <span style="color: blue;">="Root"</span>
          <span style="color: red;"> Storyboard.TargetProperty</span>
          <span style="color: blue;">="Opacity"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SplineDoubleKeyFrame</span>
          <span style="color: red;"> KeyTime</span>
          <span style="color: blue;">="0"</span>
          <span style="color: red;"> Value</span>
          <span style="color: blue;">="0"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualState</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualState</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Open"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: red;"> Storyboard.TargetName</span>
          <span style="color: blue;">="xform"</span>
          <span style="color: red;"> Storyboard.TargetProperty</span>
          <span style="color: blue;">="X"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SplineDoubleKeyFrame</span>
          <span style="color: red;"> KeyTime</span>
          <span style="color: blue;">="0"</span>
          <span style="color: red;"> Value</span>
          <span style="color: blue;">="0"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: red;"> Storyboard.TargetName</span>
          <span style="color: blue;">="Root"</span>
          <span style="color: red;"> Storyboard.TargetProperty</span>
          <span style="color: blue;">="Opacity"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SplineDoubleKeyFrame</span>
          <span style="color: red;"> KeyTime</span>
          <span style="color: blue;">="0"</span>
          <span style="color: red;"> Value</span>
          <span style="color: blue;">="1"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Storyboard</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualState</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateGroup</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">vsm</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">VisualStateManager.VisualStateGroups</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid.RenderTransform</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TranslateTransform</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="xform"</span>
          <span style="color: red;"> X</span>
          <span style="color: blue;">="-25"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid.RenderTransform</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="4,4,-4,-4"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="#152A2E31"</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="3,3,-3,-3"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="#252A2E31"</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="2,2,-2,-2"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="#352A2E31"</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="1,1,-1,-1"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="#452A2E31"</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="#FFDC000C"</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="Green"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBlock</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="8,3,8,4"</span>
          <span style="color: red;"> MaxWidth</span>
          <span style="color: blue;">="250"</span>
          <span style="color: red;"> UseLayoutRounding</span>
          <span style="color: blue;">="false"</span>
          <span style="color: red;"> Foreground</span>
          <span style="color: blue;">="White"</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Path</span>
          <span style="color: blue;">=(Validation.Errors)[</span>0<span style="color: blue;">].Exception.Message}"</span><span style="color: red;"> TextWrapping</span><span style="color: blue;">="Wrap"/&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ControlTemplate</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">        &lt;Style x:Key="TextBoxStyle1"
TargetType="TextBox"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
&lt;Setter Property="BorderThickness" Value="1"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
&lt;Setter Property="Background" Value="#FFFFFFFF"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
&lt;Setter Property="Foreground" Value="#FF000000"/&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: #808080;">           
&lt;Setter Property="Padding" Value="2"/&gt;</span>
        </p>
        <p>
Yukarıdaki örnek uygulamaızın XAML kodunun ilk altmış satırını görebilirsiniz. Bu
altmış satır içerisinde önemli olan şey <strong>ValidationToolTipTemplate</strong> adındaki
ControlTemplate nesnesi. Söz konusu nesne TextBox'ın Template'i içerisinde
de kullanılıyor. Aşağıdaki TextBox'ımızın Template'ine ait XAML kodu içerisinde
yukarıdaki ControlTemplate'in nasıl kullanıldığını görebilirsiniz.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: gray;">&lt;Border x:Name="ValidationErrorElement" Visibility="Collapsed"
BorderBrush="#FFDB000C" BorderThickness="1" CornerRadius="1"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ToolTipService.ToolTip</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                   
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ToolTip</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="validationTooltip"</span>
          <span style="color: red;"> DataContext</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> RelativeSource</span>
          <span style="color: blue;">={</span>
          <span style="color: #a31515;">RelativeSource</span>
          <span style="color: red;"> TemplatedParent</span>
          <span style="color: blue;">}}"</span>
          <span style="color: red;">
            <strong>Template</strong>
          </span>
          <span style="color: blue;">
            <strong>="{</strong>
          </span>
          <span style="color: #a31515;">
            <strong>StaticResource</strong>
          </span>
          <span style="color: red;">
            <strong> ValidationToolTipTemplate</strong>
          </span>
          <span style="color: blue;">
            <strong>}"</strong>
          </span>
          <span style="color: red;"> Placement</span>
          <span style="color: blue;">="Right"</span>
          <span style="color: red;"> PlacementTarget</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> RelativeSource</span>
          <span style="color: blue;">={</span>
          <span style="color: #a31515;">RelativeSource</span>
          <span style="color: red;"> TemplatedParent</span>
          <span style="color: blue;">}}"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">                                    </span>
          <span style="color: #808080;">    </span>
          <span style="color: #808080;">&lt;ToolTip.Triggers&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
            &lt;EventTrigger RoutedEvent="Canvas.Loaded"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                &lt;BeginStoryboard&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
&lt;Storyboard&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
    &lt;ObjectAnimationUsingKeyFrames Storyboard.TargetName="validationTooltip"
Storyboard.TargetProperty="IsHitTestVisible"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
        &lt;DiscreteObjectKeyFrame KeyTime="0"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
            &lt;DiscreteObjectKeyFrame.Value&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
                &lt;System:Boolean&gt;true&lt;/System:Boolean&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
            &lt;/DiscreteObjectKeyFrame.Value&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
        &lt;/DiscreteObjectKeyFrame&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
    &lt;/ObjectAnimationUsingKeyFrames&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                   
&lt;/Storyboard&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
                &lt;/BeginStoryboard&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
            &lt;/EventTrigger&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
        &lt;/ToolTip.Triggers&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
    &lt;/ToolTip&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
&lt;/ToolTipService.ToolTip&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
&lt;Grid Height="12" HorizontalAlignment="Right" Margin="1,-4,-4,0"
VerticalAlignment="Top" Width="12" Background="Transparent"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
    &lt;Path Fill="#FFDC000C" Margin="1,3,0,0"
Data="M 1,0 L6,0 A 2,2 90 0 1 8,2 L8,7 z"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
    &lt;Path Fill="#ffffff" Margin="1,3,0,0" Data="M
0,0 L2,0 L 8,6 L8,8"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #808080;">           
                   
&lt;/Grid&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: #808080;">           
                &lt;/Border</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
TextBox'ın Template'i içerisinde bulunan bir <strong>Border</strong> nesnesine <strong>Tooltip</strong> kontrolü
atanmış. Söz konusu <strong>Tooltip</strong> kontrolünün şablonu ise doğrudan <strong>ValidationToolTipTemplate</strong> adındaki
şablonla eşleştirilmiş durumda. Böylece biz doğrudan ValidationToolTipTemplate nesnesini
değiştirerek validasyon esnasında görülen Tooltip'i değiştirebiliriz.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: red;"> CornerRadius</span>
          <span style="color: blue;">="4"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="Green"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBlock</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="8,3,8,4"</span>
          <span style="color: red;"> MaxWidth</span>
          <span style="color: blue;">="250"</span>
          <span style="color: red;"> UseLayoutRounding</span>
          <span style="color: blue;">="false"</span>
          <span style="color: red;"> Foreground</span>
          <span style="color: blue;">="White"</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Path</span>
          <span style="color: blue;">=(Validation.Errors)[</span>0<span style="color: blue;">].Exception.Message}"</span><span style="color: red;"> TextWrapping</span><span style="color: blue;">="Wrap"/&gt;</span></p>
        <p style="margin-top: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Border</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıdaki kesiti <strong>ValidationToolTipTemplate</strong> içerisinden aldım. Tooltip
şablonu içerisinde buradaki Textblock'un Text'i görüldüğü üzere bir <strong>Binding</strong> ile
beraber geliyor. Arkaplanda yolladığımız <strong>Exception'ların</strong> mesajlarının <strong>Tooltip</strong> içerisinde
gözükmesini sağlayan sistem bu bindingden ibaret. Eğer burayı silersiniz mesajlarınız
gözükmeyecektir o nedenle tasarımınızı değiştirirken bu noktaya dikkat etmekte fayda
var.
</p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7" />
      </body>
      <title>Silverlight 3.0 içerisinde görsel veri validasyonu.</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/ckdSJQ_gKPA/PermaLink.aspx</link>
      <pubDate>Fri, 03 Jul 2009 15:16:38 GMT</pubDate>
      <description>&lt;p&gt;
Silverlight içerisinde veri validasyonu konusunda validasyon kontrollerimiz yok gibi
gözükse de aslında arka planda işimize yarayabilecek ilginç bir sistem var. Bu sistemi
hem tasarımcı hem de yazılımcı beraber kullanırlarsa ortaya çok güzel sonuçlar çıkabilir.
Bu yazımızda nesne bazlı veri validasyonunu nasıl yapabiliriz konusuna göz atacağız.
&lt;/p&gt;
&lt;p&gt;
Hemen örneğimize başlama yoluna uygulamamızın ekranına bir DataGrid koyalım. Bir sonraki
adımda uygun nesneleri yaratarak bu Grid&amp;#39;e bağlayacağız sonrasında da Grid içerisinde
hücre başına validasyon yapmaya çalışacağız.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication81.MainPage&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;myGrid&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Görsel tarafı en azından şimdilik hallettiğimize göre hemen veri tarafına geçip işimizi
görecek kadar örnek veri yaratalım. İlk olarak verimiz içerisinde her nesneyi tanımlayacak
olan Urun sınıfını hazırlıyoruz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; Urun
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; PAdi &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; Adi() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; PAdi
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PAdi =
value
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; PSatis &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; Satis() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; PSatis
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PSatis
= value
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Göreceğiniz üzere &lt;strong&gt;Urun&lt;/strong&gt; sınıfının sadece iki tane Property&amp;#39;si
var. Bunlardan biri ürünün adını taşırken diğeri ise toplam satış rakamını taşıyacak.
Bu sınıfımızdan bir liste yaratarak rastgele urunler ekleyip Grid&amp;#39;imize basit
bir şekilde bağlayacağız.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Loaded
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Liste &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; List(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; Urun)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; index &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt; =
1 &lt;span style="color: blue;"&gt;To&lt;/span&gt; 10
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Liste.Add(&lt;span style="color: blue;"&gt;New&lt;/span&gt; Urun() &lt;span style="color: blue;"&gt;With&lt;/span&gt; {.Adi
= &lt;span style="color: #a31515;"&gt;&amp;quot;&amp;#220;r&amp;#252;n Adi&amp;quot;&lt;/span&gt; &amp;amp; index,
.Satis = Rnd() * 50})
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myGrid.ItemsSource = Liste
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Bütün bu manzara içerisinde bir anda aklınızda &amp;quot;ürün isimleri boş bırakılmasın&amp;quot;
şeklinde bir validasyon geldiğini varsayalım. Peki ne yapacağız? Aslında konu tahmin
edeceğinizden çok daha basit. İlk olarak validasyon işlemini yapabileceğimiz basit
bir yer var, orası da &lt;strong&gt;Urun&lt;/strong&gt; sınıfımızın Property&amp;#39;lerinin &lt;strong&gt;Set&lt;/strong&gt; durumu. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; PAdi &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt; Adi() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; PAdi
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Get&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;.IsNullOrEmpty(value) &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Throw&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; ValidationException(&lt;span style="color: #a31515;"&gt;&amp;quot;isim
bo&amp;#351; ge&amp;#231;ilemez!&amp;quot;&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
PAdi = value
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Set&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Property&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kod içerisinde sadece tek bir Property&amp;#39;nin set ve get durumunu görüyorsunuz.
İlk baştaki örneğimizden farklı olarak &lt;strong&gt;Set&lt;/strong&gt; işleminde gelen value&amp;#39;yu
kontrol ediyoruz. Eğer Grid içerisinde bu Property&amp;#39;e denk gelen TextBox boş bırakılırsa
doğan olarak arka tarafa grid boş değer döndürerek söz konusu nesnenin property&amp;#39;sini
değiştirmeye çalışacak. İşte tam da o notkada devreye girip kontrolleri yapıp gerekiyorsa
bir &lt;strong&gt; ValidationException&lt;/strong&gt; fırlatıyoruz. Exception fırlatırken kullanıcıya
vermek istediğimiz mesajı da parametre olarak constructor&amp;#39;a geçebiliriz. 
&lt;/p&gt;
&lt;p&gt;
Eğer projeyi bu hali ile Debug modunda açarsanız hatayı Debug tarafında görürsünüz.
Oysa projeyi Debug mode yerine normal şekilde çalıştırırsanız aşağıdaki manzara ile
karşılaşacaksınız.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Basit bir validasyon sonucu..." height="342" src="http://daron.yondem.com/tr/content/binary/03072009_1.png" width="411"&gt;
&lt;br&gt;
&lt;em&gt;Basit bir validasyon sonucu...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz gibi manzara gerçekten çok hoş. Görsel olarak da güzel bir animasyon ile
sahneye gelen bu tooltip çoğu validasyon ihtiyacınızı giderecektir. Grid içerisinde
herhangi bir ek işleme gerek kalmadan validasyonu çalışır hale getirmiş olsak da farklı
kontrollerde Binding ayarlarken vermeniz gereken ek parametreler de mevcut.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication81.MainPage&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;myGrid&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; AutoGenerateColumns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;False&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Adi&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGridTemplateColumn&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Gridimizi yukarıdaki şekli ile biraz değiştirdik. Artık DataGrid ile beraber gelen
hazır kolonları değil de özel kolon tasarımlarını kullandığımızı düşünelim. Bizim
örneğimizde sadece Adi kolonunu ekledik ve bu kolonun tasarımına da bir TextBox koyduk.
Böylece bu kolon sürekli TextBox olarak gözükecek. Peki acaba bu TextBox&amp;#39;ı da
boş bıraktığımızda validasyon hatasını görebilecek miyiz? Maalesef hayır.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;lt;UserControl xmlns:data=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: gray;"&gt; x:Class=&amp;quot;SilverlightApplication81.MainPage&amp;quot;
xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: gray;"&gt; xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
Width=&amp;quot;400&amp;quot; Height=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Grid x:Name=&amp;quot;LayoutRoot&amp;quot;
Background=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;data:DataGrid
x:Name=&amp;quot;myGrid&amp;quot; AutoGenerateColumns=&amp;quot;False&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;data:DataGrid.Columns&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;data:DataGridTemplateColumn&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;data:DataGridTemplateColumn.CellTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBox&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Mode&lt;/span&gt;&lt;span style="color: blue;"&gt;=TwoWay,&lt;/span&gt;&lt;span style="color: red;"&gt; NotifyOnValidationError&lt;/span&gt;&lt;span style="color: blue;"&gt;=true,&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=Adi,&lt;/span&gt;&lt;span style="color: red;"&gt; ValidatesOnExceptions&lt;/span&gt;&lt;span style="color: blue;"&gt;=true}&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/data:DataGridTemplateColumn.CellTemplate&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/data:DataGridTemplateColumn&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/data:DataGrid.Columns&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/data:DataGrid&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;lt;/UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Bu noktada değiştirmemiz gereken şey Binding mekanizmamızla alakalı ayarlar. İlk olarak &lt;strong&gt;Mode&amp;#39;u&lt;/strong&gt; &lt;strong&gt;TwoWay&lt;/strong&gt; yaparak
buradaki değişikliklerin de nesne tarafına yansımasını sağlıyoruz ki nesne tarafındaki
validasyon gerçekleşsin. Ayrıca &lt;strong&gt;NotifyOnValidationError&lt;/strong&gt; ve &lt;strong&gt;ValidatesOnExceptions&lt;/strong&gt; özelliklerini
de &lt;strong&gt;True&lt;/strong&gt; yaparak gerekli hataların gösterilmesini sağlıyoruz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Özel binding ile validasyon." height="342" src="http://daron.yondem.com/tr/content/binary/03072009_2.png" width="404"&gt;
&lt;br&gt;
&lt;em&gt;Özel binding ile validasyon.&lt;/em&gt;
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Görselliği değiştirelim...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Herhangi bir kontrolün validation işlemi sonrasında InValid olması haline gösterilmek
üzere InValid State&amp;#39;lerinin bulunması gerekir. Hali hazırda Silverlight içerisindeki
çoğu kontrolde bu state&amp;#39;ler zaten hazır ve tasarımları yapılmış durumda. Eğer
yukarıdaki örneğimizi Expression Blend ile açar ve TextBox&amp;#39;ın Template&amp;#39;ini
editlemek isterseniz söz konusu menüde &amp;quot;&lt;strong&gt;Edit a copy&lt;/strong&gt;&amp;quot; demeyi
unutmayın. 
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="TextBox kontolümüzü Template'ini kopyalayarak editleyelim." height="432" src="http://daron.yondem.com/tr/content/binary/03072009_3.png" width="389"&gt;
&lt;br&gt;
&lt;em&gt;TextBox kontolümüzü Template'ini kopyalayarak editleyelim.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Böylece Blend sizin yerinize standart şablonu kopyalayacaktır. Bunu yaptıktan sonra
söz konusu şablonun için VisualStateManager&amp;#39;da &lt;strong&gt;InValid&lt;/strong&gt; statelerini
bulabilir ve bu stateler için hazırlanmış tasarımları değiştirebilirsiniz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Blend içerisinde TextBox'a ait ayrı stateler..." height="210" src="http://daron.yondem.com/tr/content/binary/03072009_4.png" width="634"&gt;
&lt;br&gt;
&lt;em&gt;Blend içerisinde TextBox'a ait ayrı stateler...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
State&amp;#39;ler arası tasarımları değiştirdikten sonra büyük ihtimal ile InValid durumunde
gösterilen Tooltip&amp;#39;in de tasarımını değiştirebilmek isteyeceksiniz. Blend içerisinden
şu an için (Blend 3 MIX Preview sürümü) bir çözüm bulunmasa da kod tarafından gerekli
özelleştirmeleri yapabiliriz. Textbox&amp;#39;ımızın Template&amp;#39;inden bir kopya alıp
editlerken aslında beraberindeki Tooltip&amp;#39;in tasarımının da bir kopyası uygulamamızın
sayfasında &lt;strong&gt;Resource&lt;/strong&gt; olarak saklanıyor. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;lt;UserControl xmlns:data=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: gray;"&gt; xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: gray;"&gt; xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
xmlns:vsm=&amp;quot;clr-namespace:System.Windows;assembly=System.Windows&amp;quot; xmlns:System=&amp;quot;clr-namespace:System;assembly=mscorlib&amp;quot;
xmlns:d=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot; xmlns:mc=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: gray;"&gt; x:Class=&amp;quot;SilverlightApplication81.MainPage&amp;quot;
Width=&amp;quot;400&amp;quot; Height=&amp;quot;300&amp;quot; mc:Ignorable=&amp;quot;d&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Key&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;ValidationToolTipTemplate&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Root&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;5,0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Opacity&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; RenderTransformOrigin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0,0&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;OpenStates&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateGroup.Transitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualTransition&lt;/span&gt;&lt;span style="color: red;"&gt; GeneratedDuration&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualTransition&lt;/span&gt;&lt;span style="color: red;"&gt; GeneratedDuration&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0:0:0.2&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; To&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Open&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;xform&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;X&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span style="color: red;"&gt; KeyTime&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0:0:0.2&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Root&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Opacity&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span style="color: red;"&gt; KeyTime&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0:0:0.2&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;1&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualTransition&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateGroup.Transitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualState&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Closed&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Root&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Opacity&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span style="color: red;"&gt; KeyTime&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualState&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualState&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Open&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;xform&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;X&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span style="color: red;"&gt; KeyTime&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Root&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Opacity&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SplineDoubleKeyFrame&lt;/span&gt;&lt;span style="color: red;"&gt; KeyTime&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;1&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DoubleAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualState&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;vsm&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.RenderTransform&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TranslateTransform&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;xform&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; X&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;-25&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.RenderTransform&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4,4,-4,-4&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#152A2E31&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;3,3,-3,-3&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#252A2E31&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;2,2,-2,-2&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#352A2E31&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;1,1,-1,-1&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#452A2E31&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#FFDC000C&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Green&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;8,3,8,4&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; MaxWidth&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;250&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; UseLayoutRounding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Foreground&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=(Validation.Errors)[&lt;/span&gt;0&lt;span style="color: blue;"&gt;].Exception.Message}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; TextWrapping&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Wrap&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Style x:Key=&amp;quot;TextBoxStyle1&amp;quot;
TargetType=&amp;quot;TextBox&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Setter Property=&amp;quot;BorderThickness&amp;quot; Value=&amp;quot;1&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;#FFFFFFFF&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Setter Property=&amp;quot;Foreground&amp;quot; Value=&amp;quot;#FF000000&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Setter Property=&amp;quot;Padding&amp;quot; Value=&amp;quot;2&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki örnek uygulamaızın XAML kodunun ilk altmış satırını görebilirsiniz. Bu
altmış satır içerisinde önemli olan şey &lt;strong&gt;ValidationToolTipTemplate&lt;/strong&gt; adındaki
ControlTemplate nesnesi. Söz konusu nesne TextBox&amp;#39;ın Template&amp;#39;i içerisinde
de kullanılıyor. Aşağıdaki TextBox&amp;#39;ımızın Template&amp;#39;ine ait XAML kodu içerisinde
yukarıdaki ControlTemplate&amp;#39;in nasıl kullanıldığını görebilirsiniz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;lt;Border x:Name=&amp;quot;ValidationErrorElement&amp;quot; Visibility=&amp;quot;Collapsed&amp;quot;
BorderBrush=&amp;quot;#FFDB000C&amp;quot; BorderThickness=&amp;quot;1&amp;quot; CornerRadius=&amp;quot;1&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ToolTipService.ToolTip&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ToolTip&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;validationTooltip&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; DataContext&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; TemplatedParent&lt;/span&gt;&lt;span style="color: blue;"&gt;}}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;strong&gt;Template&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;StaticResource&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt; ValidationToolTipTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;}&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt; Placement&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Right&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; PlacementTarget&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; RelativeSource&lt;/span&gt;&lt;span style="color: blue;"&gt;={&lt;/span&gt;&lt;span style="color: #a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color: red;"&gt; TemplatedParent&lt;/span&gt;&lt;span style="color: blue;"&gt;}}&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;ToolTip.Triggers&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EventTrigger RoutedEvent=&amp;quot;Canvas.Loaded&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;BeginStoryboard&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Storyboard&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetName=&amp;quot;validationTooltip&amp;quot;
Storyboard.TargetProperty=&amp;quot;IsHitTestVisible&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DiscreteObjectKeyFrame KeyTime=&amp;quot;0&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;System:Boolean&amp;gt;true&amp;lt;/System:Boolean&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/DiscreteObjectKeyFrame&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Storyboard&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/BeginStoryboard&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/EventTrigger&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ToolTip.Triggers&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ToolTip&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/ToolTipService.ToolTip&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;Grid Height=&amp;quot;12&amp;quot; HorizontalAlignment=&amp;quot;Right&amp;quot; Margin=&amp;quot;1,-4,-4,0&amp;quot;
VerticalAlignment=&amp;quot;Top&amp;quot; Width=&amp;quot;12&amp;quot; Background=&amp;quot;Transparent&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Path Fill=&amp;quot;#FFDC000C&amp;quot; Margin=&amp;quot;1,3,0,0&amp;quot;
Data=&amp;quot;M 1,0 L6,0 A 2,2 90 0 1 8,2 L8,7 z&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Path Fill=&amp;quot;#ffffff&amp;quot; Margin=&amp;quot;1,3,0,0&amp;quot; Data=&amp;quot;M
0,0 L2,0 L 8,6 L8,8&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;lt;/Grid&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Border&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
TextBox&amp;#39;ın Template&amp;#39;i içerisinde bulunan bir &lt;strong&gt;Border&lt;/strong&gt; nesnesine &lt;strong&gt;Tooltip&lt;/strong&gt; kontrolü
atanmış. Söz konusu &lt;strong&gt;Tooltip&lt;/strong&gt; kontrolünün şablonu ise doğrudan &lt;strong&gt;ValidationToolTipTemplate&lt;/strong&gt; adındaki
şablonla eşleştirilmiş durumda. Böylece biz doğrudan ValidationToolTipTemplate nesnesini
değiştirerek validasyon esnasında görülen Tooltip&amp;#39;i değiştirebiliriz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: red;"&gt; CornerRadius&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;4&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Green&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;8,3,8,4&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; MaxWidth&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;250&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; UseLayoutRounding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Foreground&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Path&lt;/span&gt;&lt;span style="color: blue;"&gt;=(Validation.Errors)[&lt;/span&gt;0&lt;span style="color: blue;"&gt;].Exception.Message}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; TextWrapping&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Wrap&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Border&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kesiti &lt;strong&gt;ValidationToolTipTemplate&lt;/strong&gt; içerisinden aldım. Tooltip
şablonu içerisinde buradaki Textblock&amp;#39;un Text&amp;#39;i görüldüğü üzere bir &lt;strong&gt;Binding&lt;/strong&gt; ile
beraber geliyor. Arkaplanda yolladığımız &lt;strong&gt;Exception&amp;#39;ların&lt;/strong&gt; mesajlarının &lt;strong&gt;Tooltip&lt;/strong&gt; içerisinde
gözükmesini sağlayan sistem bu bindingden ibaret. Eğer burayı silersiniz mesajlarınız
gözükmeyecektir o nedenle tasarımınızı değiştirirken bu noktaya dikkat etmekte fayda
var.
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=66dbe8b5-ba24-48e1-baf9-f02d030b2ca7</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Silverlight içerisinde herhangi bir nesneye şeffaf fon vermek veya bir renk seçerken
Alpha kanalını da ayarlamak mümkün fakat elinizde hali hazırda bir görsel varsa ve
bu görsel içerisindeki belirli bir rengin şeffafa çevrilmesini istiyorsanız ne yapabilirsiniz? 
</p>
        <p style="color:maroon;">
          <strong>Ne zaman lazım olacak ki?</strong>
        </p>
        <p>
"Chroma Key" denilen bu efektin en çok kullanıldığın yer fotoğraf veya videoların
birleştirilmesi noktasında karşımıza çıkıyor. Örneğin koşan bir adam videosu var elinizde
fakat bu adamı kendi fon görselinizde koşturmak istiyorsunuz. Bu durumda videonun
fonunu silip yerine başka bir şeyler koyabiliyor olmanız gerekir. Aynı şey fotoğraflar
için de geçerli. Tabi her konuda olduğu gibi bu konuda da belirli kurallar var. Bir
şekilde bir resmin ve videonun fonunu silebilmek istiyorsanız aslında o videonun da
uygun şekilde hazırlanmış olması gerekiyor.
</p>
        <p align="center">
          <img border="1" alt="Chroma Key'e uygun bir video." height="244" src="http://daron.yondem.com/tr/content/binary/02072009_1.jpg" width="324" />
          <br />
          <em> Chroma Key'e uygun bir video.</em>
        </p>
        <p>
Yukarıda görmüş olduğunuz kare bir videonun alınma. Fonun yeşil olması tabi ki şart
değil. Bu notkada önemli olan şey video içerisinden almak istediğiniz obje ile fonun
birbirine tezat renkler taşıması. Böylece bu videoyu gösterirken yeşil pikselleri
bularak şeffaf hale çevirebileceğiz. Durum böyle olunca da rahatlıkla bu videonun
arkasına başka bir video veya herhangi bir kontrol yerleştirebiliriz.
</p>
        <p style="color:maroon;">
          <strong>Peki nasıl yapacağız?</strong>
        </p>
        <p>
Bir video veya resim dosyasından bir rengi şeffaf hale getirmek için o dosyanın görselinde
her pikseli tek tek gezmemiz gerekecek fakat özellikle video dosyalarından bahsedersek
video içerisinde her kareyi de tek tek incelemek epey zahmetli olabilir. Oysa Silverlight
3.0 ile beraber gelen yeni özelliklerden biri olan PixelShader efektleri tam da bu
iş için biçilmiş kaftan. 
</p>
        <p>
PixelShader efektleri zaten uygulandıkları görselin her pikseli gösterilmeden önce
o pikseldeki renk değerlerine müdahale edebilen efektler şeklinde tasarlanıyor. <a href="http://daron.yondem.com/tr/PermaLink.aspx?guid=71093404-f9f0-4af1-8a3d-1129d0670ba8" target="_blank"> Silverlight
3.0 ile Piksel Shader</a> kullanımı makalemizde daha detaylı bilgi bulabilirsiniz.
</p>
        <p>
Biz örneğimizde kullanmak üzere yeni bir PixelShader efekti yaratacağız. Bu efekt
kendisine gelen her pikseli inceleyerek Chrome Key rengine yakın bir renk var ise
o rengi şeffaf hale çevirecek. Tüm bu kontrol yapılırken tabi ki eldeki renk ile Chrome
key renginin yakınlığı konusunda da bir parametre kullanmak durumundayız. Özetlemek
gerekirse, eğer videomuzun fonu yeşil ile Chrome Key rengimiz de yeşil olacak ve PixelShader
efektine yeşil rengini vereceğiz fakat duruma göre tam olarak RGB değerleri belli
olan bir yeşil rengini değil de o yeşil rengine çok yakın diğer yeşilleri de şeffaflaştırmak
isteyebiliriz. İşte bu yakınlık değerini <strong>Threshold</strong> denilen ayrı bir
parametrede tutacağız. 
</p>
        <p>
          <strong>[HLSL]</strong>
        </p>
        <p style="margin: 0px;">
sampler2D input : register(S0);
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
          <span style="color: blue;">float</span> red : register(C0);
</p>
        <p style="margin: 0px;">
          <span style="color: blue;">float</span> green : register(C1);
</p>
        <p style="margin: 0px;">
          <span style="color: blue;">float</span> blue : register(C2);
</p>
        <p style="margin: 0px;">
          <span style="color: blue;">float</span> threshold : register(C3);
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
float4 main(float2 pos : TEXCOORD) : COLOR
</p>
        <p style="margin: 0px;">
{
</p>
        <p style="margin: 0px;">
    float4    color;
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">float</span>    rkey,
gkey, bkey, thresh;
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    thresh = threshold;           
    
</p>
        <p style="margin: 0px;">
    rkey = red/255.0;
</p>
        <p style="margin: 0px;">
    gkey = green/255.0;
</p>
        <p style="margin: 0px;">
    bkey = blue/255.0;
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    color = tex2D(input, pos);
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">if</span> (abs(color.r - rkey) &lt;=
thresh)
</p>
        <p style="margin: 0px;">
    {
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">if</span> (abs(color.g
- gkey) &lt;= thresh)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">if</span> (abs(color.b
- bkey) &lt;= thresh)
</p>
        <p style="margin: 0px;">
            {
</p>
        <p style="margin: 0px;">
                <span style="color: green;">//
Şeffaflaştır</span></p>
        <p style="margin: 0px;">
                color.a
= 0.0;
</p>
        <p style="margin: 0px;">
            }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
    }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">return</span> color;
</p>
        <p style="margin-top: 0px;">
}
</p>
        <p>
Yukarıdaki kod efektimizim HLSL ile yazılmış hali. Konumuz HLSL olmadığı için detaylarına
girmeyeceğim. Önemli olan bu şekilde HLSL efektini yazdıktan sonra efekti compile
edip ortaya çıkan PS dosyasını Silverlight ile kullanmak. PixelShader efektlerinin
Silverlight ile kullanımı konusunda <a href="http://daron.yondem.com/tr/PermaLink.aspx?guid=71093404-f9f0-4af1-8a3d-1129d0670ba8" target="_blank"> Silverlight
3.0 ile Piksel Shader</a> makalesini incelemeyi unutmayın.
</p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">public</span><span style="color: blue;">class</span><span style="color: #2b91af;">AlphaShader</span> : <span style="color: #2b91af;">ShaderEffect</span></p>
        <p style="margin: 0px;">
    {
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span> AlphaShader()
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.PixelShader
= <span style="color: blue;">new</span><span style="color: #2b91af;">PixelShader</span>();
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.PixelShader.UriSource
= <span style="color: blue;">new</span><span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"/Alpha.ps"</span>, <span style="color: #2b91af;">UriKind</span>.Relative
);
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.UpdateShaderValue(InputProperty);
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.UpdateShaderValue(RedProperty);
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.UpdateShaderValue(GreenProperty);
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.UpdateShaderValue(BlueProperty);
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.UpdateShaderValue(ThreshProperty);
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: #2b91af;">Brush</span> Input
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">get</span> { <span style="color: blue;">return</span> (<span style="color: #2b91af;">Brush</span>)GetValue(InputProperty);
}
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">set</span> {
SetValue(InputProperty, <span style="color: blue;">value</span>); }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">static</span><span style="color: blue;">readonly</span><span style="color: #2b91af;">DependencyProperty</span> InputProperty
= <span style="color: #2b91af;">ShaderEffect</span>.RegisterPixelShaderSamplerProperty(<span style="color: #a31515;">"Input"</span>, <span style="color: blue;">typeof</span>(<span style="color: #2b91af;">AlphaShader</span>),
0);
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">static</span><span style="color: blue;">readonly</span><span style="color: #2b91af;">DependencyProperty</span> RedProperty
= <span style="color: #2b91af;">DependencyProperty</span>.Register(<span style="color: #a31515;">"Threshold"</span>, <span style="color: blue;">typeof</span>(<span style="color: blue;">double</span>), <span style="color: blue;">typeof</span>(<span style="color: #2b91af;">AlphaShader</span>), <span style="color: blue;">new</span><span style="color: #2b91af;">PropertyMetadata</span>(0.0,
PixelShaderConstantCallback(0)));
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">static</span><span style="color: blue;">readonly</span><span style="color: #2b91af;">DependencyProperty</span> GreenProperty
= <span style="color: #2b91af;">DependencyProperty</span>.Register(<span style="color: #a31515;">"Red"</span>, <span style="color: blue;">typeof</span>(<span style="color: blue;">double</span>), <span style="color: blue;">typeof</span>(<span style="color: #2b91af;">AlphaShader</span>), <span style="color: blue;">new</span><span style="color: #2b91af;">PropertyMetadata</span>(0.0,
PixelShaderConstantCallback(1)));
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">static</span><span style="color: blue;">readonly</span><span style="color: #2b91af;">DependencyProperty</span> BlueProperty
= <span style="color: #2b91af;">DependencyProperty</span>.Register(<span style="color: #a31515;">"Green"</span>, <span style="color: blue;">typeof</span>(<span style="color: blue;">double</span>), <span style="color: blue;">typeof</span>(<span style="color: #2b91af;">AlphaShader</span>), <span style="color: blue;">new</span><span style="color: #2b91af;">PropertyMetadata</span>(0.0,
PixelShaderConstantCallback(2)));
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">static</span><span style="color: blue;">readonly</span><span style="color: #2b91af;">DependencyProperty</span> ThreshProperty
= <span style="color: #2b91af;">DependencyProperty</span>.Register(<span style="color: #a31515;">"Blue"</span>, <span style="color: blue;">typeof</span>(<span style="color: blue;">double</span>), <span style="color: blue;">typeof</span>(<span style="color: #2b91af;">AlphaShader</span>), <span style="color: blue;">new</span><span style="color: #2b91af;">PropertyMetadata</span>(0.25,
PixelShaderConstantCallback(3)));
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">double</span> Threshold
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">get</span> { <span style="color: blue;">return</span> (<span style="color: blue;">double</span>)GetValue(ThreshProperty);
}
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">set</span> {
SetValue(ThreshProperty, <span style="color: blue;">value</span>); }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">double</span> Red
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">get</span> { <span style="color: blue;">return</span> (<span style="color: blue;">double</span>)GetValue(RedProperty);
}
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">set</span> {
SetValue(RedProperty, <span style="color: blue;">value</span>); }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">double</span> Green
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">get</span> { <span style="color: blue;">return</span> (<span style="color: blue;">double</span>)GetValue(GreenProperty);
}
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">set</span> {
SetValue(GreenProperty, <span style="color: blue;">value</span>); }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">double</span> Blue
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">get</span> { <span style="color: blue;">return</span> (<span style="color: blue;">double</span>)GetValue(BlueProperty);
}
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">set</span> {
SetValue(BlueProperty, <span style="color: blue;">value</span>); }
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin-top: 0px;">
    }
</p>
        <p>
Yukarıdaki sınıf bizim <strong>AlphaShader</strong> adını verdiğimiz kendi <strong>PixelShader</strong> efektimizin
Silverlight içerisindeki tanımı. Söz konusu PixelShader efekti uygulama içerisindeki
compile edilmiş <strong>Alpha.ps</strong> efektini kullanıyor. Gördüğünüz tüm Dependency
Propoerty'ler de aslında HLSL'e gönderdiğimiz parametreler. Chroma Key rengimizin
RGB değerlerini ayrı ayrı gönderirken Threshold değerini de 1 ile 0 arasında gönderiyoruz.
</p>
        <p>
Artık efektimiz hazır olduğuna göre uygulamamızın arayüzünü de hazırlayabiliriz. 
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication30.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="800"</span><span style="color: red;"> Height</span><span style="color: blue;">="600"</span></p>
        <p style="margin: 0px;">
            <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">daron</span><span style="color: blue;">="clr-namespace:SilverlightApplication30"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Image</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="8,18,86,69"</span>
          <span style="color: red;"> Source</span>
          <span style="color: blue;">="Desert.jpg"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">MediaElement</span>
        </p>
        <p style="margin: 0px;">
           <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Name</span><span style="color: blue;">="myVideo"</span></p>
        <p style="margin: 0px;">
           <span style="color: red;"> Margin</span><span style="color: blue;">="30,32,109,89"</span></p>
        <p style="margin: 0px;">
           <span style="color: red;"> Source</span><span style="color: blue;">="ornek.wmv"/&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Gördüğünüz gibi örneğimizde basit bir şekilde bir resim ve üzerinde de bir video bulunuyor.
Amacımız video içerisindeki yeşil kısmı kaldırıp sanki video içerisinde arkadaş resmin
üzerinde hareket ediyormuş izlenimi yaratmak. Şimdi tekrar kod tarafına geçerek efektimizi
MediaElement'imize uygulayalım.
</p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">void</span> MainPage_Loaded(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">var</span> x
= <span style="color: blue;">new</span><span style="color: #2b91af;">AlphaShader</span>();
</p>
        <p style="margin: 0px;">
            x.Threshold = 0.37;
</p>
        <p style="margin: 0px;">
            x.Red = 91;
</p>
        <p style="margin: 0px;">
            x.Green =254;
</p>
        <p style="margin: 0px;">
x.Blue = 125;
</p>
        <p style="margin: 0px;">
            myVideo.Effect = x;
</p>
        <p style="margin-top: 0px;">
        }
</p>
        <p>
Gördüğünüz gibi daha önceki adımlarda yarattığımız AlphaShader sınıfımızdan bir kopya
alıp tüm Property'lerine uygun değerleri veriyoruz. Sonrasında da artık efektimizi
MediaElement'in Effect'ine eşitliyoruz. Peki nasıl bir sonuç mu alıyoruz?
Sonuç aşağıda.
</p>
        <p align="center">
          <img border="1" alt="PixelShader ile Chrome Key efekti." height="182" src="http://daron.yondem.com/tr/content/binary/02072009_2.jpg" width="236" />
          <br />
          <em>PixelShader ile Chrome Key efekti.</em>
        </p>
        <p>
Gördüğünüz gibi videomuz içerisindeki yeşil kısımlar tamamen yok oldu ve onun yerine
çok daha farklı bir görsel yerleştirebildik. Videomuz oynarken de herhangi bir sorun
olmayacak ve PixelShader efektimiz sürekli çalışarak bulduğu yeşil pikselleri şeffaf
hale getirecek.
</p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=84d6a965-6c16-453f-be33-d89fd49fad1d" />
      </body>
      <title>Silverlight 3.0 içerisinde şeffaf videolar (Chrome Key Efekti)</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/OktWtD0Pzz4/PermaLink.aspx</link>
      <pubDate>Thu, 02 Jul 2009 09:03:09 GMT</pubDate>
      <description>&lt;p&gt;
Silverlight içerisinde herhangi bir nesneye şeffaf fon vermek veya bir renk seçerken
Alpha kanalını da ayarlamak mümkün fakat elinizde hali hazırda bir görsel varsa ve
bu görsel içerisindeki belirli bir rengin şeffafa çevrilmesini istiyorsanız ne yapabilirsiniz? 
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Ne zaman lazım olacak ki?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Chroma Key&amp;quot; denilen bu efektin en çok kullanıldığın yer fotoğraf veya videoların
birleştirilmesi noktasında karşımıza çıkıyor. Örneğin koşan bir adam videosu var elinizde
fakat bu adamı kendi fon görselinizde koşturmak istiyorsunuz. Bu durumda videonun
fonunu silip yerine başka bir şeyler koyabiliyor olmanız gerekir. Aynı şey fotoğraflar
için de geçerli. Tabi her konuda olduğu gibi bu konuda da belirli kurallar var. Bir
şekilde bir resmin ve videonun fonunu silebilmek istiyorsanız aslında o videonun da
uygun şekilde hazırlanmış olması gerekiyor.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Chroma Key'e uygun bir video." height="244" src="http://daron.yondem.com/tr/content/binary/02072009_1.jpg" width="324"&gt;
&lt;br&gt;
&lt;em&gt; Chroma Key&amp;#39;e uygun bir video.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda görmüş olduğunuz kare bir videonun alınma. Fonun yeşil olması tabi ki şart
değil. Bu notkada önemli olan şey video içerisinden almak istediğiniz obje ile fonun
birbirine tezat renkler taşıması. Böylece bu videoyu gösterirken yeşil pikselleri
bularak şeffaf hale çevirebileceğiz. Durum böyle olunca da rahatlıkla bu videonun
arkasına başka bir video veya herhangi bir kontrol yerleştirebiliriz.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Peki nasıl yapacağız?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Bir video veya resim dosyasından bir rengi şeffaf hale getirmek için o dosyanın görselinde
her pikseli tek tek gezmemiz gerekecek fakat özellikle video dosyalarından bahsedersek
video içerisinde her kareyi de tek tek incelemek epey zahmetli olabilir. Oysa Silverlight
3.0 ile beraber gelen yeni özelliklerden biri olan PixelShader efektleri tam da bu
iş için biçilmiş kaftan. 
&lt;/p&gt;
&lt;p&gt;
PixelShader efektleri zaten uygulandıkları görselin her pikseli gösterilmeden önce
o pikseldeki renk değerlerine müdahale edebilen efektler şeklinde tasarlanıyor. &lt;a href="http://daron.yondem.com/tr/PermaLink.aspx?guid=71093404-f9f0-4af1-8a3d-1129d0670ba8" target="_blank"&gt; Silverlight
3.0 ile Piksel Shader&lt;/a&gt; kullanımı makalemizde daha detaylı bilgi bulabilirsiniz.
&lt;/p&gt;
&lt;p&gt;
Biz örneğimizde kullanmak üzere yeni bir PixelShader efekti yaratacağız. Bu efekt
kendisine gelen her pikseli inceleyerek Chrome Key rengine yakın bir renk var ise
o rengi şeffaf hale çevirecek. Tüm bu kontrol yapılırken tabi ki eldeki renk ile Chrome
key renginin yakınlığı konusunda da bir parametre kullanmak durumundayız. Özetlemek
gerekirse, eğer videomuzun fonu yeşil ile Chrome Key rengimiz de yeşil olacak ve PixelShader
efektine yeşil rengini vereceğiz fakat duruma göre tam olarak RGB değerleri belli
olan bir yeşil rengini değil de o yeşil rengine çok yakın diğer yeşilleri de şeffaflaştırmak
isteyebiliriz. İşte bu yakınlık değerini &lt;strong&gt;Threshold&lt;/strong&gt; denilen ayrı bir
parametrede tutacağız. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[HLSL]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
sampler2D input : register(S0);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;float&lt;/span&gt; red : register(C0);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;float&lt;/span&gt; green : register(C1);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;float&lt;/span&gt; blue : register(C2);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;float&lt;/span&gt; threshold : register(C3);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
float4 main(float2 pos : TEXCOORD) : COLOR
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; float4&amp;nbsp;&amp;nbsp;&amp;nbsp; color;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;float&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rkey,
gkey, bkey, thresh;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; thresh = threshold;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rkey = red/255.0;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; gkey = green/255.0;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; bkey = blue/255.0;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; color = tex2D(input, pos);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (abs(color.r - rkey) &amp;lt;=
thresh)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (abs(color.g
- gkey) &amp;lt;= thresh)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (abs(color.b
- bkey) &amp;lt;= thresh)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;//
&amp;#350;effafla&amp;#351;t&amp;#305;r&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; color.a
= 0.0;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; color;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
}
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kod efektimizim HLSL ile yazılmış hali. Konumuz HLSL olmadığı için detaylarına
girmeyeceğim. Önemli olan bu şekilde HLSL efektini yazdıktan sonra efekti compile
edip ortaya çıkan PS dosyasını Silverlight ile kullanmak. PixelShader efektlerinin
Silverlight ile kullanımı konusunda &lt;a href="http://daron.yondem.com/tr/PermaLink.aspx?guid=71093404-f9f0-4af1-8a3d-1129d0670ba8" target="_blank"&gt; Silverlight
3.0 ile Piksel Shader&lt;/a&gt; makalesini incelemeyi unutmayın.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;ShaderEffect&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; AlphaShader()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.PixelShader
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PixelShader&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.PixelShader.UriSource
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;&amp;quot;/Alpha.ps&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;UriKind&lt;/span&gt;.Relative
);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.UpdateShaderValue(InputProperty);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.UpdateShaderValue(RedProperty);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.UpdateShaderValue(GreenProperty);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.UpdateShaderValue(BlueProperty);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.UpdateShaderValue(ThreshProperty);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Brush&lt;/span&gt; Input
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Brush&lt;/span&gt;)GetValue(InputProperty);
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {
SetValue(InputProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; InputProperty
= &lt;span style="color: #2b91af;"&gt;ShaderEffect&lt;/span&gt;.RegisterPixelShaderSamplerProperty(&lt;span style="color: #a31515;"&gt;&amp;quot;Input&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;),
0);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; RedProperty
= &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color: #a31515;"&gt;&amp;quot;Threshold&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;), &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyMetadata&lt;/span&gt;(0.0,
PixelShaderConstantCallback(0)));
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; GreenProperty
= &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color: #a31515;"&gt;&amp;quot;Red&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;), &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyMetadata&lt;/span&gt;(0.0,
PixelShaderConstantCallback(1)));
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; BlueProperty
= &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color: #a31515;"&gt;&amp;quot;Green&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;), &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyMetadata&lt;/span&gt;(0.0,
PixelShaderConstantCallback(2)));
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: blue;"&gt;readonly&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt; ThreshProperty
= &lt;span style="color: #2b91af;"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;span style="color: #a31515;"&gt;&amp;quot;Blue&amp;quot;&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;), &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PropertyMetadata&lt;/span&gt;(0.25,
PixelShaderConstantCallback(3)));
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; Threshold
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;double&lt;/span&gt;)GetValue(ThreshProperty);
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {
SetValue(ThreshProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; Red
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;double&lt;/span&gt;)GetValue(RedProperty);
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {
SetValue(RedProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; Green
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;double&lt;/span&gt;)GetValue(GreenProperty);
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {
SetValue(GreenProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; Blue
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; (&lt;span style="color: blue;"&gt;double&lt;/span&gt;)GetValue(BlueProperty);
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; {
SetValue(BlueProperty, &lt;span style="color: blue;"&gt;value&lt;/span&gt;); }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki sınıf bizim &lt;strong&gt;AlphaShader&lt;/strong&gt; adını verdiğimiz kendi &lt;strong&gt;PixelShader&lt;/strong&gt; efektimizin
Silverlight içerisindeki tanımı. Söz konusu PixelShader efekti uygulama içerisindeki
compile edilmiş &lt;strong&gt;Alpha.ps&lt;/strong&gt; efektini kullanıyor. Gördüğünüz tüm Dependency
Propoerty&amp;#39;ler de aslında HLSL&amp;#39;e gönderdiğimiz parametreler. Chroma Key rengimizin
RGB değerlerini ayrı ayrı gönderirken Threshold değerini de 1 ile 0 arasında gönderiyoruz.
&lt;/p&gt;
&lt;p&gt;
Artık efektimiz hazır olduğuna göre uygulamamızın arayüzünü de hazırlayabiliriz. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication30.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;800&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;600&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;daron&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:SilverlightApplication30&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Image&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;8,18,86,69&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Desert.jpg&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;myVideo&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;30,32,109,89&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;ornek.wmv&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz gibi örneğimizde basit bir şekilde bir resim ve üzerinde de bir video bulunuyor.
Amacımız video içerisindeki yeşil kısmı kaldırıp sanki video içerisinde arkadaş resmin
üzerinde hareket ediyormuş izlenimi yaratmak. Şimdi tekrar kod tarafına geçerek efektimizi
MediaElement&amp;#39;imize uygulayalım.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; x
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;AlphaShader&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; x.Threshold = 0.37;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; x.Red = 91;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; x.Green =254;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
x.Blue = 125;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myVideo.Effect = x;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz gibi daha önceki adımlarda yarattığımız AlphaShader sınıfımızdan bir kopya
alıp tüm Property&amp;#39;lerine uygun değerleri veriyoruz. Sonrasında da artık efektimizi
MediaElement&amp;#39;in Effect&amp;#39;ine eşitliyoruz. Peki nasıl bir sonuç mu alıyoruz?
Sonuç aşağıda.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="PixelShader ile Chrome Key efekti." height="182" src="http://daron.yondem.com/tr/content/binary/02072009_2.jpg" width="236"&gt;
&lt;br&gt;
&lt;em&gt;PixelShader ile Chrome Key efekti.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz gibi videomuz içerisindeki yeşil kısımlar tamamen yok oldu ve onun yerine
çok daha farklı bir görsel yerleştirebildik. Videomuz oynarken de herhangi bir sorun
olmayacak ve PixelShader efektimiz sürekli çalışarak bulduğu yeşil pikselleri şeffaf
hale getirecek.
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=84d6a965-6c16-453f-be33-d89fd49fad1d" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=84d6a965-6c16-453f-be33-d89fd49fad1d</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sayfalama senaryoları her zaman ihtiyacımız olan işlevselliklerden olmuştur. En basit
kullanımı ile bir DataGrid içerisindeki verinin sayfalanabilir olarak gösterilebilmesi
gerekir. Bu sayfalama işlemi bazen sunucu taraflı bazen de istemci taraflı yapılabilir.
Bu makalede Silverlight 3.0 ile beraber gelen DataGrid kontrolünü kullanarak sayfalama
işlemlerine göz atacağız.
</p>
        <p style="color:maroon;">
          <strong>Sayfalama için görsel kontrol?</strong>
        </p>
        <p>
Sayfalama işlemi için doğrudan Silverlight 3.0 ile beraber gelen <strong>DataPager</strong> kontrolünü
kullanacağız. Bu kontrol kendisine verilen <strong>PagedCollectionView</strong> nesnesine
göre sayfalama yapabiliyor. Tabi söz konusu veriyi doğrudan DataPager'a vermek
pek anlamlı değil o nedenle verimizi yaratıp ilk olarak bir gride bağlayalım. Sonrasında
Grid içerisindeki veriyi sayfalaması üzerine DataPager'a gerekli komutu vereceğiz.
</p>
        <p style="color:maroon;">
          <strong>İstemci taraflı sayfalama...</strong>
        </p>
        <p>
İlk örneğimizde tüm veriyi istemci tarafında sayfalayacağız. Bu gibi bir sayfalamayı
ancak tüm veriyi istemci tarafına uygun bir sürede alabiliyorsanız yapabilirsiniz.
Eğer elinizdeki veri bir defada istemciye yüklenemeyecek durumda ise sayfalamayı da
tabi ki sunucu tarafında yapmak gerekecektir. İstemci tarafındaki sayfalama aslında
sadece görsel amaçlarla ve ileriki adımlarda filtreme için kullanılabilir.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">data</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">layoutToolkit</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">dataControls</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication77.MainPage"</span><span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Grid"&gt;&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">dataControls</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataPager</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Pager"&gt;&lt;/</span>
          <span style="color: #a31515;">dataControls</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataPager</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıdaki örneğimizde bir DataGrid ve bir de DataPager kontrolü bulunuyor. Söz konusu
kontrollere gerekli isimleri de vererek kod tarafından ulaşılabilir hale getirip uygulamamıza
devam edebiliriz. Elimizde basit bir isim listesi olduğunu düşünürsek ilk olarak bu
listeyi bir <strong>PagedCollectionView'a</strong> çevirmemiz gerekecek.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> MainPage_Loaded(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.RoutedEventArgs) <span style="color: blue;">Handles</span><span style="color: blue;">Me</span>.Loaded
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> AnaListe <span style="color: blue;">As</span><span style="color: blue;">New</span> List(<span style="color: blue;">Of</span><span style="color: blue;">String</span>)
</p>
        <p style="margin: 0px;">
        AnaListe.Add(<span style="color: #a31515;">"Daron"</span>)
</p>
        <p style="margin: 0px;">
        AnaListe.Add(<span style="color: #a31515;">"Burak"</span>)
</p>
        <p style="margin: 0px;">
        AnaListe.Add(<span style="color: #a31515;">"Muammer"</span>)
</p>
        <p style="margin: 0px;">
        AnaListe.Add(<span style="color: #a31515;">"Uğur"</span>)
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> Liste <span style="color: blue;">As</span><span style="color: blue;">New</span><strong>PagedCollectionView</strong>(AnaListe)
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <strong>Grid</strong>.ItemsSource = Liste
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
Yukarıdaki kod içerisinde basit bir String List'in <strong> PagedcollectionView'a</strong> çevrilmesini
görebilirsiniz. Aslında işlem epey basit çünkü PagedCollectionView zaten constructor'larından
birinde <strong> IEnumarable</strong> interface'ini implemente eden obje istiyor.
Elimizdeki liste de buna uyduğunu göre doğrudan çeviri işlemini hızlıca halledebiliyoruz.
Son olarak eldeki PagedCollectionView'u da Grid adındaki DataGrid'imize aktarmamız
ilk aşamanın tamamlanması için yeterli olacaktır.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">data</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">layoutToolkit</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">dataControls</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication77.MainPage"</span><span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Grid"&gt;&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">dataControls</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataPager</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Pager"</span>
          <span style="color: red;"> PageSize</span>
          <span style="color: blue;">="2"</span>
          <span style="color: red;"> DisplayMode</span>
          <span style="color: blue;">="PreviousNextNumeric"</span>
        </p>
        <p style="margin: 0px;">
                   <span style="color: red;"><strong>Source</strong></span><span style="color: blue;"><strong>="{</strong></span><span style="color: #a31515;"><strong>Binding</strong></span><span style="color: red;"><strong> ItemsSource</strong></span><span style="color: blue;"><strong>,</strong></span><span style="color: red;"><strong> ElementName</strong></span><span style="color: blue;"><strong>=Grid}"</strong>&gt;&lt;/</span><span style="color: #a31515;">dataControls</span><span style="color: blue;">:</span><span style="color: #a31515;">DataPager</span><span style="color: blue;">&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Şu ana kadar DataPager kontrolümüz ile DataGrid'in birbirinden haberi yoktu. İşte
yukarıdaki kod içerisinde bu iki kontrolü birbirinden haberdar ediyoruz ve DataGrid'in
ItemsSource'un kodumuz ile vermiş olduğumuz PagedViewCollection'ın DataPager
tarafından kontrol edilmesini sağlıyoruz.
</p>
        <p>
Tüm bu işlemleri yapabilmek için basit bir Element Binding kullanarak <strong> DataPager'ın</strong><strong>Source</strong> Property'sini <strong>Grid'in</strong><strong>ItemsSource'una</strong> bind
etmemiz yeterli oluyor. Artık elimizde istemci tarafında sayfalama ile çalışabilen
bir DataGrid var. DataGrid'in her sayfasında kaç kayıt gösterileceğini <strong>PageSize</strong> özelliğinden
ayarlayabilirsiniz. 
</p>
        <p align="center">
          <img border="1" alt="Sayfalama desteği ile bir DataGrid kontrolü." height="142" src="http://daron.yondem.com/tr/content/binary/01072009.png" width="413" />
          <br />
          <em>Sayfalama desteği ile bir DataGrid kontrolü.</em>
        </p>
        <p>
DataPager ile ilgili farklı görsel özellikler için <strong>DisplayMode</strong> Enumaration'ını
incelemenizi tavsiye ederim.
</p>
        <p style="color:maroon;">
          <strong>Sunucu taraflı sayfalama...</strong>
        </p>
        <p>
Eğer veri miktarınız çok yüksek ise maalesef tüm veriyi istemci tarafına almak gibi
bir şansınız olmayabilir. Bu gibi durumlarda Silverlight uygulamasının sürekli olarak
istediği sayfanın sayısını sunucuya göndererek sadece o sayfadaki veriyi sunucudan
alması gerekecektir. Tahmin edebileceğiniz üzere bu işin iki farklı ayağı var; birincisi
sunucu tarafında uygun sayfaya ait veriyi sayfa numarasına göre döndürebilen bir web
servisinin hazırlanması, ikincisi ise bu servisin Silverlight tarafından doğru olarak
kullanılabilmesi.
</p>
        <p>
          <strong>[Service / VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Dim</span> DB <span style="color: blue;">As</span><span style="color: blue;">New</span> DataClasses1DataContext
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    &lt;OperationContract()&gt; _
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Public</span><span style="color: blue;">Function</span> VeriGetir(<span style="color: blue;">ByVal</span> Atla <span style="color: blue;">As</span><span style="color: blue;">Integer</span>, <span style="color: blue;">ByVal</span> Al <span style="color: blue;">As</span><span style="color: blue;">Integer</span>) <span style="color: blue;">As</span> List(<span style="color: blue;">Of</span> Urunler)
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Return</span> (<span style="color: blue;">From</span> inc <span style="color: blue;">In</span> DB.Urunlers <span style="color: blue;">Skip</span> (Atla) <span style="color: blue;">Take</span> (Al) <span style="color: blue;">Select</span> inc).ToList()
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Function</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    &lt;OperationContract()&gt; _
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Public</span><span style="color: blue;">Function</span> KayitSayisi() <span style="color: blue;">As</span><span style="color: blue;">Integer</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Return</span> (<span style="color: blue;">From</span> inc <span style="color: blue;">In</span> DB.Urunlers <span style="color: blue;">Select</span> inc).Count
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Function</span></p>
        <p>
Yukarıda sunucu tarafındaki servisimizin kodunu bulabilirsiniz. Toplamda iki servise
ihtiyacımız var; bu servislerinden biri veritabanında bulunan toplam kayıt sayısını
alarak istemciye göndermek zorunda. Böylece DataPager kontrolü toplam kaç sayfalık
bir veri ile uğraştığını bilebilecek. Diğer yandan sayfa sayfa duruma göre veri döndürebilecek
bir servis de kesinlikle şart. Tüm bunları LINQ2SQL ile beraber yaparsanız sayfalamanız
otomatik olarak SQL tarafına kadar taşınmış oluyor. Aksi halde sizin SQL tarafındaki
sayfalama mekanizmasını da kurmanız gerekecektir. 
</p>
        <p>
Özellikle VeriGetir adındaki metodumuzu incelemek gerekirse toplamda iki parametre
aldığını görebiliriz. Bunlardan biri veritabanından kayıt çekilirken kaç kayıt atlanmasını
gerektiğini diğeri ise kaç kayıt alınması gerektiğini belirtiyor. Örneğin her defasında
10'ar kayıt gösteriyorsak ve üçüncü sayfadaysak toplam 20 kayıt atlamamız gerektiği
ve 10 kayıt almamız gerektiğini hesaplamak pek zor değil. Bu hesaplamaları Silverlight
tarafında yaparak servise parametre olarak vereceğiz. Servis de bize uygun veriyi
döndürecek. 
</p>
        <p style="color:maroon;">
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">data</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"</span>
        </p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">layoutToolkit</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">dataControls</span><span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication77.MainPage"</span><span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
       <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span><span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Grid"&gt;&lt;/</span>
          <span style="color: #a31515;">data</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataGrid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">dataControls</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataPager</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="Pager"</span>
          <span style="color: red;"> PageSize</span>
          <span style="color: blue;">="1"</span>
          <span style="color: red;"> DisplayMode</span>
          <span style="color: blue;">="PreviousNextNumeric"&gt;&lt;/</span>
          <span style="color: #a31515;">dataControls</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">DataPager</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">StackPanel</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıdaki XAML kodu uygulamamızın ana ekranını temsil ediyor. Bir önceki örneğimizden
farklı olarak burada artık bir ElementBinding kullanmadığımı görebilirsiniz. Nedeni
çok basit; artık tüm veri DataGrid üzerinde değil o nedenle DataPager gidip de Grid'in
ItemsSource'u üzerinden sayfalama yapamayacak.
</p>
        <p style="margin-left:85px;margin-right:25px;">
          <span style="color: #FF0000">
            <em>Not: </em>
            <strong>
              <em>ElementBinding</em>
            </strong>
            <em> mekanizmasının
çalışmasını ve ilk örneğimizdeki sistemi daha profesyonel bir şekilde veriyi sunucu
tarafında sayfalar hale getirmek isterseniz yapmanız gereken </em>
            <strong>
              <em>IPagedCollectionView</em>
            </strong>
            <em> interface'ini
implemente eden kendi PagedCollectionView nesnenizi programlamanız. Nesne içerisinde
sayfa değişim eventlarından bir çok farklı duruma erişip verinin uygun kaynaklardan
alınmasını sağlayabilirsiniz. Ben kişisel olarak ne kadar bu yolun daha profesyonel
olduğunu düşünsem de hem yazılım geliştirme süreci olacak hem de kalifikasyon açısından
hedeflediğimiz işlevsellik için biraz yüksek seviyede kaldığını düşünüyorum. O nedenle
makalede çok daha basit bir teknik kullanacağım. Eğer siz daha karışık işlevselliklere
ihtiyaç duyarsanız </em>
            <strong>
              <em>IPagedCollectionView</em>
            </strong>
            <em> interface'i
üzerinden ilerleyebilirsiniz.</em>
          </span>
        </p>
        <p>
DataPager'ı kullanmaktaki tek amacımız kullanıcıya uygun arayüzü göstermesi. Yani
"sağ" "sol" düğmeleri ve "sayılar" bizim için yeterli.
Bundan sonrasında ne de olsa sunucu tarafında sayfalama yapacağımıza göre DataPager'ın
bize kullanıcı tarafından seçili sayfanın sayısını vermesi yeterli olacaktır. Fakat
DataPager'ın çalışması için uygun bir PagedViewCollection'ın <strong>Source</strong> olarak
atanmış olması şart. 
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">WithEvents</span> Servis <span style="color: blue;">As</span><span style="color: blue;">New</span> ServiceReference1.Service1Client
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> MainPage_Loaded(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.RoutedEventArgs) <span style="color: blue;">Handles</span><span style="color: blue;">Me</span>.Loaded
</p>
        <p style="margin: 0px;">
        Servis.KayitSayisiAsync()
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> Servis_KayitSayisiCompleted(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> ServiceReference1.KayitSayisiCompletedEventArgs) <span style="color: blue;">Handles</span> Servis.KayitSayisiCompleted
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> Liste <span style="color: blue;">As</span><span style="color: blue;">New</span> List(<span style="color: blue;">Of</span> Nullable(<span style="color: blue;">Of</span><span style="color: blue;">Integer</span>))
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">For</span> index <span style="color: blue;">As</span><span style="color: blue;">Integer</span> =
1 <span style="color: blue;">To</span> e.Result
</p>
        <p style="margin: 0px;">
            Liste.Add(<span style="color: blue;">Nothing</span>)
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Next</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> DummyList <span style="color: blue;">As</span><span style="color: blue;">New</span> PagedCollectionView(Liste)
</p>
        <p style="margin: 0px;">
        Pager.Source = DummyList
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        Servis.VeriGetirAsync(Pager.PageIndex * Pager.PageSize,
Pager.PageSize)
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
Sayfa ilk yüklendiğinde hemen kayıt sayısını getirecek olan servisimizi çağırıyoruz.
Söz konusu servisten toplam kayıt sayısı geldiği gibi sadece DataPager'a verilmek
üzere boş bir List yaratıyoruz. Bu List içerisinde <strong> Item</strong> sayısı gelen
kayıt sayısı ile aynı fakat List'in içindeki her Item aslında boş! DataPager'ın
çalışması için aslında boş bir liste yaratıp kendisini kandırıyoruz. 
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> Pager_PageIndexChanged(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.EventArgs) <span style="color: blue;">Handles</span> Pager.PageIndexChanged
</p>
        <p style="margin: 0px;">
        Servis.VeriGetirAsync(Pager.PageIndex * Pager.PageSize,
Pager.PageSize)
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> Servis_VeriGetirCompleted(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> ServiceReference1.VeriGetirCompletedEventArgs) <span style="color: blue;">Handles</span> Servis.VeriGetirCompleted
</p>
        <p style="margin: 0px;">
        Grid.ItemsSource = e.Result
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
Artık DataPager kontrolümüzün PageIndexChanged durumunu yakalayabiliriz. Her defasında
sayfa değiştiğinde sayfa sayısı ile sayfa boyutunu çarpıp atlanacak olan kayıt sayısını
buluyoruz. Zaten sayfa sayısı Index olarak geldiği için ilk sayfada 0 gelecek ve atlanacak
kayıt sayısı da 0 olacak. Servise göndermemiz gereken ikinci parametre de zaten DataPager'ın
PageSize özelliği, yani sayfa başına gösterilecek kayıt sayısı. 
</p>
        <p>
Son olarak bu servisimizden gelen sonucu da Grid'imize bağlarsak işlem tamamlanmış
olacaktır. Artık elimizde sunucu tarafında sayfalama yapabilen bir arayüzümüz var.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=97826af2-6e81-421b-9bcf-94502e4f64f2" />
      </body>
      <title>Silverlight 3.0 içerisinde DataPager ve istemci/sunucu taraflı sayfalama</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/khCX6LQ46kA/PermaLink.aspx</link>
      <pubDate>Wed, 01 Jul 2009 16:17:59 GMT</pubDate>
      <description>&lt;p&gt;
Sayfalama senaryoları her zaman ihtiyacımız olan işlevselliklerden olmuştur. En basit
kullanımı ile bir DataGrid içerisindeki verinin sayfalanabilir olarak gösterilebilmesi
gerekir. Bu sayfalama işlemi bazen sunucu taraflı bazen de istemci taraflı yapılabilir.
Bu makalede Silverlight 3.0 ile beraber gelen DataGrid kontrolünü kullanarak sayfalama
işlemlerine göz atacağız.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Sayfalama için görsel kontrol?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Sayfalama işlemi için doğrudan Silverlight 3.0 ile beraber gelen &lt;strong&gt;DataPager&lt;/strong&gt; kontrolünü
kullanacağız. Bu kontrol kendisine verilen &lt;strong&gt;PagedCollectionView&lt;/strong&gt; nesnesine
göre sayfalama yapabiliyor. Tabi söz konusu veriyi doğrudan DataPager&amp;#39;a vermek
pek anlamlı değil o nedenle verimizi yaratıp ilk olarak bir gride bağlayalım. Sonrasında
Grid içerisindeki veriyi sayfalaması üzerine DataPager&amp;#39;a gerekli komutu vereceğiz.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;İstemci taraflı sayfalama...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
İlk örneğimizde tüm veriyi istemci tarafında sayfalayacağız. Bu gibi bir sayfalamayı
ancak tüm veriyi istemci tarafına uygun bir sürede alabiliyorsanız yapabilirsiniz.
Eğer elinizdeki veri bir defada istemciye yüklenemeyecek durumda ise sayfalamayı da
tabi ki sunucu tarafında yapmak gerekecektir. İstemci tarafındaki sayfalama aslında
sadece görsel amaçlarla ve ileriki adımlarda filtreme için kullanılabilir.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;layoutToolkit&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication77.MainPage&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Grid&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Pager&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki örneğimizde bir DataGrid ve bir de DataPager kontrolü bulunuyor. Söz konusu
kontrollere gerekli isimleri de vererek kod tarafından ulaşılabilir hale getirip uygulamamıza
devam edebiliriz. Elimizde basit bir isim listesi olduğunu düşünürsek ilk olarak bu
listeyi bir &lt;strong&gt;PagedCollectionView&amp;#39;a&lt;/strong&gt; çevirmemiz gerekecek.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Loaded
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; AnaListe &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; List(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AnaListe.Add(&lt;span style="color: #a31515;"&gt;&amp;quot;Daron&amp;quot;&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AnaListe.Add(&lt;span style="color: #a31515;"&gt;&amp;quot;Burak&amp;quot;&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AnaListe.Add(&lt;span style="color: #a31515;"&gt;&amp;quot;Muammer&amp;quot;&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; AnaListe.Add(&lt;span style="color: #a31515;"&gt;&amp;quot;U&amp;#287;ur&amp;quot;&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Liste &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; &lt;strong&gt;PagedCollectionView&lt;/strong&gt;(AnaListe)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;Grid&lt;/strong&gt;.ItemsSource = Liste
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kod içerisinde basit bir String List&amp;#39;in &lt;strong&gt; PagedcollectionView&amp;#39;a&lt;/strong&gt; çevrilmesini
görebilirsiniz. Aslında işlem epey basit çünkü PagedCollectionView zaten constructor&amp;#39;larından
birinde &lt;strong&gt; IEnumarable&lt;/strong&gt; interface&amp;#39;ini implemente eden obje istiyor.
Elimizdeki liste de buna uyduğunu göre doğrudan çeviri işlemini hızlıca halledebiliyoruz.
Son olarak eldeki PagedCollectionView&amp;#39;u da Grid adındaki DataGrid&amp;#39;imize aktarmamız
ilk aşamanın tamamlanması için yeterli olacaktır.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;layoutToolkit&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication77.MainPage&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Grid&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Pager&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; PageSize&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; DisplayMode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;PreviousNextNumeric&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; &lt;strong&gt;Source&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;Binding&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt; ItemsSource&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;,&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt; ElementName&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=Grid}&amp;quot;&lt;/strong&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Şu ana kadar DataPager kontrolümüz ile DataGrid&amp;#39;in birbirinden haberi yoktu. İşte
yukarıdaki kod içerisinde bu iki kontrolü birbirinden haberdar ediyoruz ve DataGrid&amp;#39;in
ItemsSource&amp;#39;un kodumuz ile vermiş olduğumuz PagedViewCollection&amp;#39;ın DataPager
tarafından kontrol edilmesini sağlıyoruz.
&lt;/p&gt;
&lt;p&gt;
Tüm bu işlemleri yapabilmek için basit bir Element Binding kullanarak &lt;strong&gt; DataPager&amp;#39;ın&lt;/strong&gt; &lt;strong&gt;Source&lt;/strong&gt; Property&amp;#39;sini &lt;strong&gt;Grid&amp;#39;in&lt;/strong&gt; &lt;strong&gt;ItemsSource&amp;#39;una&lt;/strong&gt; bind
etmemiz yeterli oluyor. Artık elimizde istemci tarafında sayfalama ile çalışabilen
bir DataGrid var. DataGrid&amp;#39;in her sayfasında kaç kayıt gösterileceğini &lt;strong&gt;PageSize&lt;/strong&gt; özelliğinden
ayarlayabilirsiniz. 
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Sayfalama desteği ile bir DataGrid kontrolü." height="142" src="http://daron.yondem.com/tr/content/binary/01072009.png" width="413"&gt;
&lt;br&gt;
&lt;em&gt;Sayfalama desteği ile bir DataGrid kontrolü.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
DataPager ile ilgili farklı görsel özellikler için &lt;strong&gt;DisplayMode&lt;/strong&gt; Enumaration&amp;#39;ını
incelemenizi tavsiye ederim.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Sunucu taraflı sayfalama...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Eğer veri miktarınız çok yüksek ise maalesef tüm veriyi istemci tarafına almak gibi
bir şansınız olmayabilir. Bu gibi durumlarda Silverlight uygulamasının sürekli olarak
istediği sayfanın sayısını sunucuya göndererek sadece o sayfadaki veriyi sunucudan
alması gerekecektir. Tahmin edebileceğiniz üzere bu işin iki farklı ayağı var; birincisi
sunucu tarafında uygun sayfaya ait veriyi sayfa numarasına göre döndürebilen bir web
servisinin hazırlanması, ikincisi ise bu servisin Silverlight tarafından doğru olarak
kullanılabilmesi.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[Service / VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; DB &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; DataClasses1DataContext
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;OperationContract()&amp;gt; _
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; VeriGetir(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Atla &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; Al &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;) &lt;span style="color: blue;"&gt;As&lt;/span&gt; List(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; Urunler)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; (&lt;span style="color: blue;"&gt;From&lt;/span&gt; inc &lt;span style="color: blue;"&gt;In&lt;/span&gt; DB.Urunlers &lt;span style="color: blue;"&gt;Skip&lt;/span&gt; (Atla) &lt;span style="color: blue;"&gt;Take&lt;/span&gt; (Al) &lt;span style="color: blue;"&gt;Select&lt;/span&gt; inc).ToList()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;OperationContract()&amp;gt; _
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; KayitSayisi() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; (&lt;span style="color: blue;"&gt;From&lt;/span&gt; inc &lt;span style="color: blue;"&gt;In&lt;/span&gt; DB.Urunlers &lt;span style="color: blue;"&gt;Select&lt;/span&gt; inc).Count
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda sunucu tarafındaki servisimizin kodunu bulabilirsiniz. Toplamda iki servise
ihtiyacımız var; bu servislerinden biri veritabanında bulunan toplam kayıt sayısını
alarak istemciye göndermek zorunda. Böylece DataPager kontrolü toplam kaç sayfalık
bir veri ile uğraştığını bilebilecek. Diğer yandan sayfa sayfa duruma göre veri döndürebilecek
bir servis de kesinlikle şart. Tüm bunları LINQ2SQL ile beraber yaparsanız sayfalamanız
otomatik olarak SQL tarafına kadar taşınmış oluyor. Aksi halde sizin SQL tarafındaki
sayfalama mekanizmasını da kurmanız gerekecektir. 
&lt;/p&gt;
&lt;p&gt;
Özellikle VeriGetir adındaki metodumuzu incelemek gerekirse toplamda iki parametre
aldığını görebiliriz. Bunlardan biri veritabanından kayıt çekilirken kaç kayıt atlanmasını
gerektiğini diğeri ise kaç kayıt alınması gerektiğini belirtiyor. Örneğin her defasında
10&amp;#39;ar kayıt gösteriyorsak ve üçüncü sayfadaysak toplam 20 kayıt atlamamız gerektiği
ve 10 kayıt almamız gerektiğini hesaplamak pek zor değil. Bu hesaplamaları Silverlight
tarafında yaparak servise parametre olarak vereceğiz. Servis de bize uygun veriyi
döndürecek. 
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;layoutToolkit&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Layout.Toolkit&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication77.MainPage&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Grid&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataGrid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Pager&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; PageSize&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; DisplayMode&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;PreviousNextNumeric&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;dataControls&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;DataPager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki XAML kodu uygulamamızın ana ekranını temsil ediyor. Bir önceki örneğimizden
farklı olarak burada artık bir ElementBinding kullanmadığımı görebilirsiniz. Nedeni
çok basit; artık tüm veri DataGrid üzerinde değil o nedenle DataPager gidip de Grid&amp;#39;in
ItemsSource&amp;#39;u üzerinden sayfalama yapamayacak.
&lt;/p&gt;
&lt;p style="margin-left:85px;margin-right:25px;"&gt;
&lt;span style="color: #FF0000"&gt;&lt;em&gt;Not: &lt;/em&gt;&lt;strong&gt;&lt;em&gt;ElementBinding&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; mekanizmasının
çalışmasını ve ilk örneğimizdeki sistemi daha profesyonel bir şekilde veriyi sunucu
tarafında sayfalar hale getirmek isterseniz yapmanız gereken &lt;/em&gt;&lt;strong&gt;&lt;em&gt;IPagedCollectionView&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; interface&amp;#39;ini
implemente eden kendi PagedCollectionView nesnenizi programlamanız. Nesne içerisinde
sayfa değişim eventlarından bir çok farklı duruma erişip verinin uygun kaynaklardan
alınmasını sağlayabilirsiniz. Ben kişisel olarak ne kadar bu yolun daha profesyonel
olduğunu düşünsem de hem yazılım geliştirme süreci olacak hem de kalifikasyon açısından
hedeflediğimiz işlevsellik için biraz yüksek seviyede kaldığını düşünüyorum. O nedenle
makalede çok daha basit bir teknik kullanacağım. Eğer siz daha karışık işlevselliklere
ihtiyaç duyarsanız &lt;/em&gt;&lt;strong&gt;&lt;em&gt;IPagedCollectionView&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; interface&amp;#39;i
üzerinden ilerleyebilirsiniz.&lt;/em&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
DataPager&amp;#39;ı kullanmaktaki tek amacımız kullanıcıya uygun arayüzü göstermesi. Yani
&amp;quot;sağ&amp;quot; &amp;quot;sol&amp;quot; düğmeleri ve &amp;quot;sayılar&amp;quot; bizim için yeterli.
Bundan sonrasında ne de olsa sunucu tarafında sayfalama yapacağımıza göre DataPager&amp;#39;ın
bize kullanıcı tarafından seçili sayfanın sayısını vermesi yeterli olacaktır. Fakat
DataPager&amp;#39;ın çalışması için uygun bir PagedViewCollection&amp;#39;ın &lt;strong&gt;Source&lt;/strong&gt; olarak
atanmış olması şart. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;WithEvents&lt;/span&gt; Servis &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; ServiceReference1.Service1Client
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Loaded
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Servis.KayitSayisiAsync()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Servis_KayitSayisiCompleted(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; ServiceReference1.KayitSayisiCompletedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; Servis.KayitSayisiCompleted
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Liste &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; List(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; Nullable(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt;))
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; index &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Integer&lt;/span&gt; =
1 &lt;span style="color: blue;"&gt;To&lt;/span&gt; e.Result
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Liste.Add(&lt;span style="color: blue;"&gt;Nothing&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; DummyList &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; PagedCollectionView(Liste)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Pager.Source = DummyList
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Servis.VeriGetirAsync(Pager.PageIndex * Pager.PageSize,
Pager.PageSize)
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Sayfa ilk yüklendiğinde hemen kayıt sayısını getirecek olan servisimizi çağırıyoruz.
Söz konusu servisten toplam kayıt sayısı geldiği gibi sadece DataPager&amp;#39;a verilmek
üzere boş bir List yaratıyoruz. Bu List içerisinde &lt;strong&gt; Item&lt;/strong&gt; sayısı gelen
kayıt sayısı ile aynı fakat List&amp;#39;in içindeki her Item aslında boş! DataPager&amp;#39;ın
çalışması için aslında boş bir liste yaratıp kendisini kandırıyoruz. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Pager_PageIndexChanged(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; Pager.PageIndexChanged
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Servis.VeriGetirAsync(Pager.PageIndex * Pager.PageSize,
Pager.PageSize)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Servis_VeriGetirCompleted(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; ServiceReference1.VeriGetirCompletedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; Servis.VeriGetirCompleted
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Grid.ItemsSource = e.Result
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Artık DataPager kontrolümüzün PageIndexChanged durumunu yakalayabiliriz. Her defasında
sayfa değiştiğinde sayfa sayısı ile sayfa boyutunu çarpıp atlanacak olan kayıt sayısını
buluyoruz. Zaten sayfa sayısı Index olarak geldiği için ilk sayfada 0 gelecek ve atlanacak
kayıt sayısı da 0 olacak. Servise göndermemiz gereken ikinci parametre de zaten DataPager&amp;#39;ın
PageSize özelliği, yani sayfa başına gösterilecek kayıt sayısı. 
&lt;/p&gt;
&lt;p&gt;
Son olarak bu servisimizden gelen sonucu da Grid&amp;#39;imize bağlarsak işlem tamamlanmış
olacaktır. Artık elimizde sunucu tarafında sayfalama yapabilen bir arayüzümüz var.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=97826af2-6e81-421b-9bcf-94502e4f64f2" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=97826af2-6e81-421b-9bcf-94502e4f64f2</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <title>Windows 7 ile 7 saat</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/6oGc8pw-qOw/PermaLink.aspx</link>
      <pubDate>Tue, 30 Jun 2009 16:43:11 GMT</pubDate>
      <description>&lt;p align="center"&gt;
&lt;a href="http://www.inetatr.org/" target="_blank"&gt;&lt;img border="1" style="border-color:black;" alt="Windows 7 ile 7 Saat" height="90" src="http://daron.yondem.com/tr/content/binary/30062009_1.gif" width="728"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Bugün sizlere yepyeni ve taptaze bir etkinlik duyuruyorum :) Biliyorsunuz Windows
7&amp;#39;nin RTM (Üretime Hazır Sürüm) haline gelmesine şurada çok kısa bir zaman kaldı.
Bu zamanı doğru bir şekilde değerlendirebilmek ve hem yazılımcılar hem de sistem yöneticileri
olarak bu değişimi hazırlanabilmek adına dolu dolu bir etkinlik düzenledik.
&lt;/p&gt;
&lt;p&gt;
Etkinliğimizin en güzel yanı sistem yöneticileri ve yazılımcılar için ayrı ayrı paralel
oturumların bulunuyor olması. Açıkçası ben içerikle ilgili çok heyecanlıyım. İtiraf
etmek gerekirse etkinlikteki bazı sürpriz hediyeler eminim ki sizi de heyecanlandıracaktır
:) Neyse daha fazla ip ucu vermeden gelin sizinle içeriğimizi paylaşiyim.
&lt;/p&gt;
&lt;table align="center" cellspacing="6"&gt;
&lt;tr style="color:maroon;"&gt;
&lt;td style="text-align: center"&gt;
&lt;strong&gt;BT Uzmanları&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;
&lt;strong&gt;Yazılım Geliştiriciler&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
10.00-10.30 Windows 7'ye Genel Bakış, Sürümler, Language Packs 
&lt;br&gt;
10.45-11.30 DirectAccess&lt;br&gt;
11.45-12.30 Applocker&lt;br&gt;
13.30-14.00 BitLocker &amp; BitLocker To Go&lt;br&gt;
14.15-14.45 Problem Steps Recorder &amp; UAC Enhancements&lt;br&gt;
15.00-15.30 Search Federation&lt;br&gt;
15.45-16.15 BranchCache&lt;br&gt;
16.30.17.00 Windows XP Mode&lt;br&gt;
&lt;/td&gt;
&lt;td&gt;
10.00-11.00 MultiTouch ve Ink Uygulamaları Geliştirmek&lt;br&gt;
11.15-12.30 Ribbon kontrolünü nasıl kullanırız?&lt;br&gt;
13.30-14.30 Sensor ve Location API’ları nasıl kullanılır?&lt;br&gt;
14.45-15.15 Uygulama uyumluluğu&lt;br&gt;
15.15-16.00 Taskbar ile gelen yenilikler&lt;br&gt;
16.15-17.00 XPS ve Doküman yazdırma yenilikleri&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;
Benimle beraber sevgili &lt;a href="http://www.bakionur.com/" target="_blank"&gt;Baki Onur
Okutucu&lt;/a&gt;, &lt;a href="http://www.buraksenyurt.com/" target="_blank"&gt;Burak Selim Şenyurt&lt;/a&gt;, &lt;a href="http://www.mesutaladag.com/" target="_blank"&gt;Mesut
Aladağ&lt;/a&gt;, &lt;a href="http://www.muammerbenzes.com/" target="_blank"&gt;Muammer Benzeş&lt;/a&gt;&amp;#39;in
de konuşmacı olacağı etkinlik &lt;strong&gt;11 Temmuz, Cumartesi&lt;/strong&gt; günü &lt;strong&gt;Microsoft
Istanbul&lt;/strong&gt; ofisinde gerçekleşecek. Microsoft Istanbul ofisi haritası için &lt;a href="http://www.bing.com/maps/?v=2&amp;amp;encType=1&amp;amp;sp=Point.qvbmpdkdjbs6_Microsoft%20Istanbul____~Polyline.qvbnzvkdjbcm_qvbwcykdjc1y_qvbzjzkdjbsz_qvc3cmkdj9v0_qvc406kdj9hk_qvc2mnkdj8cj_qvbxp4kdj6td_qvbm79kdj4tb_qvbgm3kdj3b4_qvbgk0kdj3mv_Zincirlikuyu'dan%20ara%C3%A7la%20geli%C5%9F.____%230000FF_%23008000_2pt_Single_Solid_qvc39fkdj8yj_" target="_blank"&gt; buraya&lt;/a&gt; tıklayabilirsiniz.
Katılım için &lt;a href="http://www.inetatr.org"&gt; www.inetatr.org&lt;/a&gt; adresinden kayıt
olmayı unutmayın.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=f8c6865a-8b79-49fa-aecb-267b37738d75" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</comments>
      <category>Windows 7</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=f8c6865a-8b79-49fa-aecb-267b37738d75</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=a4826903-7a38-4992-aa04-eff13790ad8b</wfw:commentRss>
      <slash:comments>15</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Dün çok ilginç bir gün geçirdik hep beraber :) Sabah 08.30 gibi aldığım telefonda
Yıldız Teknik Üniversitesi'nde bir trafo arızası nedeniyle elektriğin olmadığı
bilgisi "<strong>Organik Yazılım Günü</strong>"müzün organikliğine biraz
daha doğallık kattı :) Bir, iki saat içerisinde sorunun giderileceği ümidi ile üniversitede
toplaştık. Bir sonraki haber öğlen bir gibi elektriğin geleceğiydi :) Eh biz de en
azından "Açık Kaynak Lisans Modelleri" üzerine konuşmak üzere açık bir bahçede
:) sohbete daldık.
</p>
        <p align="center">
          <img border="1" alt="Açık kaynak lisans modelleri üzerine bir sohbet..." height="280" src="http://daron.yondem.com/tr/content/binary/28062009_1.jpg" width="600" />
          <br />
          <em> Açık kaynak lisans modelleri üzerine bir sohbet...</em>
        </p>
        <p>
Sohbetimiz açık kaynak lisans modellerinden başladı ve apayrı konulara doğru ilerledi.
İtiraf etmek gerekirse ben böyle sohbet bazlı bir etkinlik hayaline sahiptim :) Hangi
konsept ile ne şekilde yapılması gerektiğini düşünürken böyle bir vesile pek aklıma
gelmemişti. Herkese katılımından dolay çok teşekkür ediyorum.
</p>
        <p>
Peki devamında ne mi yaptık? Sohbetimiz yaklaşık öğlen bire kadar sürdü :) Israrlı
bir şekilde elektrikler gelmeyince Beşiktaş'a bir yemeğe indik. Yemek sonrası
üniversiteye hala elektriklerin gelmediği bilgisini alınca Starbucks Beşiktaş'ta
sohbete devam ettik ve yavaş yavaş oradan da 15.00 gibi dağıldık diyebilirim.
</p>
        <p>
Katılan herkese çok teşekkür ediyorum. Her anlamda ilginç bir gün oldu. Özellikle
şehir dışından gelen katılımcılarımızdan elektrik idaresi adına özür diliyorum! Sanırım
"elektrik kesintisi" nedeniyle format değiştiren nadir etkinliklerden olduk.
Yaz içerisinde planladığımız esas içerik ile etkinliğimizi tekrar edeceğiz. Bu sefer
ricam herkes yanında birer kalem pil getirsin :) seri bağlayıp bir şeyler yaparız
belki zor durumlarda :)
</p>
        <p>
Hepinize tekrar teşekkürler... 
</p>
        <p>
Unutmadan :) Efsanevi fuji yağmurlarında yıkanmış fuji elmaları için Burak'a ÇOK
teşekkürler :)
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=a4826903-7a38-4992-aa04-eff13790ad8b" />
      </body>
      <title>Organik Yazılım Günü tam organik bir ortamda yaşandı!</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/rVbqHSMT_1Q/PermaLink.aspx</link>
      <pubDate>Sun, 28 Jun 2009 12:20:48 GMT</pubDate>
      <description>&lt;p&gt;
Dün çok ilginç bir gün geçirdik hep beraber :) Sabah 08.30 gibi aldığım telefonda
Yıldız Teknik Üniversitesi&amp;#39;nde bir trafo arızası nedeniyle elektriğin olmadığı
bilgisi &amp;quot;&lt;strong&gt;Organik Yazılım Günü&lt;/strong&gt;&amp;quot;müzün organikliğine biraz
daha doğallık kattı :) Bir, iki saat içerisinde sorunun giderileceği ümidi ile üniversitede
toplaştık. Bir sonraki haber öğlen bir gibi elektriğin geleceğiydi :) Eh biz de en
azından &amp;quot;Açık Kaynak Lisans Modelleri&amp;quot; üzerine konuşmak üzere açık bir bahçede
:) sohbete daldık.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Açık kaynak lisans modelleri üzerine bir sohbet..." height="280" src="http://daron.yondem.com/tr/content/binary/28062009_1.jpg" width="600"&gt;
&lt;br&gt;
&lt;em&gt; Açık kaynak lisans modelleri üzerine bir sohbet...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Sohbetimiz açık kaynak lisans modellerinden başladı ve apayrı konulara doğru ilerledi.
İtiraf etmek gerekirse ben böyle sohbet bazlı bir etkinlik hayaline sahiptim :) Hangi
konsept ile ne şekilde yapılması gerektiğini düşünürken böyle bir vesile pek aklıma
gelmemişti. Herkese katılımından dolay çok teşekkür ediyorum.
&lt;/p&gt;
&lt;p&gt;
Peki devamında ne mi yaptık? Sohbetimiz yaklaşık öğlen bire kadar sürdü :) Israrlı
bir şekilde elektrikler gelmeyince Beşiktaş&amp;#39;a bir yemeğe indik. Yemek sonrası
üniversiteye hala elektriklerin gelmediği bilgisini alınca Starbucks Beşiktaş&amp;#39;ta
sohbete devam ettik ve yavaş yavaş oradan da 15.00 gibi dağıldık diyebilirim.
&lt;/p&gt;
&lt;p&gt;
Katılan herkese çok teşekkür ediyorum. Her anlamda ilginç bir gün oldu. Özellikle
şehir dışından gelen katılımcılarımızdan elektrik idaresi adına özür diliyorum! Sanırım
&amp;quot;elektrik kesintisi&amp;quot; nedeniyle format değiştiren nadir etkinliklerden olduk.
Yaz içerisinde planladığımız esas içerik ile etkinliğimizi tekrar edeceğiz. Bu sefer
ricam herkes yanında birer kalem pil getirsin :) seri bağlayıp bir şeyler yaparız
belki zor durumlarda :)
&lt;/p&gt;
&lt;p&gt;
Hepinize tekrar teşekkürler... 
&lt;/p&gt;
&lt;p&gt;
Unutmadan :) Efsanevi fuji yağmurlarında yıkanmış fuji elmaları için Burak&amp;#39;a ÇOK
teşekkürler :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=a4826903-7a38-4992-aa04-eff13790ad8b" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</comments>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=a4826903-7a38-4992-aa04-eff13790ad8b</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bu yazımızda <a href="http://www.codeplex.com/Silverlight" target="_blank"> Silverlight
Toolkit</a> ile beraber gelen <strong>AutoCompleteBox</strong> kontrolünü inceleyeceğiz.
Bilgisayarınızda Silverlight Toolkit yükledikten sonra Toolkit içerisindeki tüm kontrolleri
Visual Studio içerisinde Toolbox'ta görebilirsiniz. Ayrıca Toolkit DLL'lerini
referans alarak kontrolleri elle XAML sayfalarınıza ekleme şansınız da var. Örneğin
AutoCompleteBox kontrolünü inceleyecek olursak; bir sayfaya söz konusu kontrolü eklemek
için ilk olarak Toolkit Assembly'lerinden <strong>System.Windows.Controls.Input</strong> Assembly'sini
projenize referans almanız sonrasında da <strong>System.Windows.Controls</strong> NameSpace'i
altından kontrolü bulmanız gerekecektir.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;">
            <strong>xmlns</strong>
          </span>
          <span style="color: blue;">
            <strong>:</strong>
          </span>
          <span style="color: red;">
            <strong>input</strong>
          </span>
          <span style="color: blue;">
            <strong>="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input"</strong>
          </span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication54.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">
            <strong>input</strong>
          </span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: blue;">&gt;&lt;/</span>
          <span style="color: #a31515;">
            <strong>input</strong>
          </span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıda gördüğünüz basit örnek içerisinde XAML root elementimizde gerekli input XML
namespace'i tanımlanmış durumda. Böylece artık input namespace'i üzerinden <strong>AutoCompleteBox</strong> kontrolümüzü
kullanabiliriz. Daha önce de bahsettiğim üzere eğer Visual Studio'nun Toolbox'ından
söz konusu kontrolü kod tarafına sürükle bırak tekniği ile yerleştirirseniz zaten
tüm bu işlemleri otomatik olarak gerçekleştirilebiliyor.
</p>
        <p style="color:maroon;">
          <strong>Haydi veriye bağlayalım!</strong>
        </p>
        <p>
Kontrolümüzü artık sahneye yerleştirdiğimize göre hemen çalıştırmak ve sonucu görmek
isteyeceğiz fakat onun öncesinde tabi ki bir veri bağlantısı yapmamız şart. Kullanıcılar
kutuya birşey yazarken AutoComplete kısmında neler gösterilecek?
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">input</span>
          <span style="color: blue;">="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input"</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication54.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="myAutoCompleteBox"</span>
          <span style="color: red;"> VerticalAlignment</span>
          <span style="color: blue;">="Top"&gt;&lt;/</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> MainPage_Loaded(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.RoutedEventArgs) <span style="color: blue;">Handles</span><span style="color: blue;">Me</span>.Loaded
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> Secenekler() <span style="color: blue;">As</span><span style="color: blue;">String</span> =
{<span style="color: #a31515;">"Silverlight"</span>, <span style="color: #a31515;">"Silvernight"</span>, <span style="color: #a31515;">"Silverfight"</span>, <span style="color: #a31515;">"SilverMonth"</span>}
</p>
        <p style="margin: 0px;">
        myAutoCompleteBox.ItemsSource = Secenekler
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">void</span> MainPage_Loaded(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">string</span>[]
Secenekler = { <span style="color: #a31515;">"Silverlight"</span>, <span style="color: #a31515;">"Silvernight"</span>, <span style="color: #a31515;">"Silverfight"</span>, <span style="color: #a31515;">"SilverMonth"</span> };
</p>
        <p style="margin: 0px;">
            myAutoCompleteBox.ItemsSource
= Secenekler;
</p>
        <p style="margin-top: 0px;">
        }
</p>
        <p>
Yukarıdaki kod içerisinde aslında basit bir şekilde tüm seçenekleri doğrudan AutoCompletebox'ın <strong>ItemsSource'una</strong> atamış
oluyoruz. Sonrasında AutoCompleteBox kendi içerisinde gerekli filtrelemeleri kullanıcılar
metin giriş yaptıkça gerçekleştirerek sonucu gösteriyor.
</p>
        <p align="center">
          <img border="1" alt="Silverlight içerisinde basit bir AutoCompleteBox" height="174" src="http://daron.yondem.com/tr/content/binary/22062009_1.png" width="427" />
          <br />
          <em>Silverlight içerisinde basit bir AutoCompleteBox</em>
        </p>
        <p style="color:maroon;">
          <strong>Peki ya web servisinden alacak olsak sonuçları?</strong>
        </p>
        <p>
Bir önceki örneği incelerken büyük ihtimal ile kendi içinizden "<em>Eee peki
kocaman bir listemiz varsa hepsini istemciye mi alacağız?</em>" diye sormuşsunuzdur.
Tabi ki hayır. Aslında normal şartlarda yapmamız gereken şey AutoCompleteBox içerisine
yazılan kelimeyi sunucuya göndermek ve geri gelen sonucu da AutoCompleteBox'ın
AutoComplete bölümünde göstermek. İşte bu işlemi yapabilmek için AutoCompletebox'ın <strong>Populating</strong> eventını
kullanıyoruz.
</p>
        <p>
Örneğimizde <strong>Tavsiye</strong> adında bir webmethod kullanacağız. Web servisinin
yazımı kısmına girmeyeceğim fakat kabaca bahsetmek gerekirse istemciden aranacak kelimeyi
alan ve veritabanına gidip uygun AutoComplete seçeneklerini bir list olarak döndüren
bir webmethod yeterli olacaktır.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> myAutoCompleteBox_Populating(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.Controls.PopulatingEventArgs) <span style="color: blue;">Handles</span> myAutoCompleteBox.Populating
</p>
        <p style="margin: 0px;">
        e.Cancel = <span style="color: blue;">True</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Dim</span> servis <span style="color: blue;">As</span><span style="color: blue;">New</span> ServiceReference1.Service1Client
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">AddHandler</span> servis.TavsiyelerCompleted, <span style="color: blue;">AddressOf</span> Servis_TavsiyelerCompleted
</p>
        <p style="margin: 0px;">
        servis.TavsiyelerAsync(myAutoCompleteBox.Text)
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span> MainPage()
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            InitializeComponent();
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">this</span>.Loaded
+= <span style="color: blue;">new</span><span style="color: #2b91af;">RoutedEventHandler</span>(MainPage_Loaded);
</p>
        <p style="margin: 0px;">
            myAutoCompleteBox.Populating
+= <span style="color: blue;">new</span><span style="color: #2b91af;">PopulatingEventHandler</span>(myAutoCompleteBox_Populating);
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">void</span> myAutoCompleteBox_Populating(<span style="color: blue;">object</span> sender, <span style="color: #2b91af;">PopulatingEventArgs</span> e)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            e.Cancel = <span style="color: blue;">true</span>;
</p>
        <p style="margin: 0px;">
            ServiceReference1.Service1Client
servis = <span style="color: blue;">new</span> ServiceReference1.Service1Client();
</p>
        <p style="margin: 0px;">
            servis.TavsiyelerCompleted
+= Servis_TavsiyelerCompleted;
</p>
        <p style="margin: 0px;">
            servis.TavsiyelerAsync(myAutoCompleteBox.Text);
</p>
        <p style="margin-top: 0px;">
        }
</p>
        <p>
Yukarıdaki kodumuzda AutoCompleteBox'ın <strong>Populating</strong> durumunu yakalayarak
hemen<strong> e.Cancel</strong> değerini <strong>True</strong> yaparak <strong>Populate</strong> işlemini
iptal ediyoruz. Neden mi? Çünkü Populate işlemi, yani AutoComplete listesinin gösterilmesi
işlemi şu anda yapılamaz. İşlemi yapabilmek için bizim Webmethod'umuza parametreyi
vermemiz, söz konusu bilginin sunucuya gitmesi ve en önemli cevabın gelmesi gerekiyor!
Cevap gelmeden <strong>Populate</strong> edemeyiz! O nedenle burada hemen <strong>Populate</strong> işlemini
iptal ediyoruz. Sonrasında WebServis'imizden bir kopya alıp <strong>Completed</strong> durumu
da ayrı bir handler'a bağlayıp elimizdeki AutoCompleteBox içerisinde metni <strong>Tavsiyeler</strong> adındaki
Webmethod'umuza gönderiyoruz.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> Servis_TavsiyelerCompleted(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> ServiceReference1.TavsiyelerCompletedEventArgs)
</p>
        <p style="margin: 0px;">
        myAutoCompleteBox.ItemsSource = e.Result
</p>
        <p style="margin: 0px;">
        myAutoCompleteBox.PopulateComplete()
</p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">private</span><span style="color: blue;">void</span> Servis_TavsiyelerCompleted(<span style="color: blue;">object</span> sender,
ServiceReference1.TavsiyelerCompletedEventArgs e)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            myAutoCompleteBox.ItemsSource
= e.Result;
</p>
        <p style="margin: 0px;">
            myAutoCompleteBox.PopulateComplete();
</p>
        <p style="margin-top: 0px;">
        }
</p>
        <p>
Populating durumunda çağırdığımız web servisimizin Completed durumunda artık veri
elimizde olduğunda göre doğrudan AutoCompleteBox'ımızın <strong> ItemsSource'una</strong> verebiliriz.
Son olarak tabi ki Populate işlemini bitirdiğimizi de AutoCompleteBox'a belirtmemiz
gerek ki hemen sonucu kullanıcıya göstersin.
</p>
        <p style="color:maroon;">
          <strong>Arama şeklini nasıl değiştiririz?</strong>
        </p>
        <p>
Varsayılan ayarları ile AutoCompleteBox'lar kendilerine verilen verinin içinde
arama yaparken kullanıcının yazdığı metinile başlayan sonuçları gösterirler. Bunun
değiştirmenin yolu AutoCompletebox'ların SearchMode özelliğinde yatıyor.
</p>
        <p align="center">
          <img border="1" alt="Veri kaynağında nasıl arama yapılacağını belirleyin." height="293" src="http://daron.yondem.com/tr/content/binary/22062009_2.png" width="639" />
          <br />
          <em>Veri kaynağında nasıl arama yapılacağını belirleyin.</em>
        </p>
        <p>
Peki bu arama sistemleri size yetmedi ve daha da özelleştirmek isterseniz ne yapabilirsiniz?
Filtreleme işlemini tamamen ele alma şansınız da var. Bu durum özellikle AutoCompleteBox'a
kendi nesne tiplerinizi bağladığınızda çok anlamlı olabilir. Filtreleme esnasından
belki de sadece ItemsSource'a verdiğiniz nesnelerin belirli Property'lerine
göre ayrı ayrı mantıklarıda aramalar yapılsın isteyebilirsiniz.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
    <span style="color: blue;">Private</span><span style="color: blue;">Sub</span> MainPage_Loaded(<span style="color: blue;">ByVal</span> sender <span style="color: blue;">As</span><span style="color: blue;">Object</span>, <span style="color: blue;">ByVal</span> e <span style="color: blue;">As</span> System.Windows.RoutedEventArgs) <span style="color: blue;">Handles</span><span style="color: blue;">Me</span>.Loaded
</p>
        <p style="margin: 0px;">
        myAutoCompleteBox.ItemFilter = <span style="color: blue;">AddressOf</span> Arama
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Sub</span></p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Function</span> Arama(<span style="color: blue;">ByVal</span> metin <span style="color: blue;">As</span><span style="color: blue;">String</span>, <span style="color: blue;">ByVal</span> nesne <span style="color: blue;">As</span> ServiceReference1.Service1Urun) <span style="color: blue;">As</span><span style="color: blue;">Boolean</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">If</span> nesne.Adi.Contains(metin) <span style="color: blue;">Then</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Return</span><span style="color: blue;">True</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">Else</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Return</span><span style="color: blue;">False</span></p>
        <p style="margin: 0px;">
        <span style="color: blue;">End</span><span style="color: blue;">If</span></p>
        <p style="margin-top: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Function</span></p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span> MainPage()
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            InitializeComponent();
</p>
        <p style="margin: 0px;">
            myAutoCompleteBox.ItemFilter
= Arama;
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">bool</span> Arama(<span style="color: blue;">string</span> metin,
ServiceReference1.Service1Urun nesne)
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">if</span> (nesne.Adi.Contains(metin))
{
</p>
        <p style="margin: 0px;">
                <span style="color: blue;">return</span><span style="color: blue;">true</span>;
</p>
        <p style="margin: 0px;">
            }
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">else</span> {
</p>
        <p style="margin: 0px;">
                <span style="color: blue;">return</span><span style="color: blue;">false</span>;
</p>
        <p style="margin: 0px;">
            }
</p>
        <p style="margin-top: 0px;">
        }
</p>
        <p>
Yukarıdaki örneğimizde AutoCompleteBox'ın <strong>ItemFilter'ına</strong> yeni
bir metod atıyoruz. Bu metod parametre olarak o anda <strong>filtrelenmek</strong> istenen <strong>Item'ı</strong>,
yani benim örneğimde <strong>ServiceReference</strong> ile beraber gelen tipte bir
nesneyi ve filtrelemede kullanılacak metni alıyor. Sonrasında gerekli kontrolleri
yaptıktan sonra geriye filtrelediğiniz her bir nesnenin gösterilip gösterilmeyeceğine
dair birer <strong>Boolean</strong> değer döndürmeniz yeterli olacaktır.
</p>
        <p style="color:maroon;">
          <strong>Görsel özelleştirmeler...</strong>
        </p>
        <p>
Makalemizde incelediğimiz tüm özellikleri kullandınız, kendi nesnelerinizi web servisi
ile döndürdünüz ve özel bir filtrelemede de eklediniz. Fakat AutoComplete listesinde
daha çok detay göstermek istiyorsunuz. Bu durumda gelin AutoCompleteBox'ın ItemTemplate'ini
bir inceleyelim.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="myAutoCompleteBox"</span>
          <span style="color: red;"> VerticalAlignment</span>
          <span style="color: blue;">="Top"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox.<strong>ItemTemplate</strong></span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
   <strong /></span>
          <span style="color: blue;">
            <strong>&lt;</strong>
          </span>
          <span style="color: #a31515;">
            <strong>DataTemplate</strong>
          </span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> HorizontalAlignment</span>
          <span style="color: blue;">="Stretch"</span>
          <span style="color: red;"> Width</span>
          <span style="color: blue;">="Auto"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid.ColumnDefinitions</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ColumnDefinition</span>
          <span style="color: red;"> Width</span>
          <span style="color: blue;">="250"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
                </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ColumnDefinition</span>
          <span style="color: red;"> Width</span>
          <span style="color: blue;">="250"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid.ColumnDefinitions</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBlock</span>
          <span style="color: red;"> Foreground</span>
          <span style="color: blue;">="Red"</span>
          <span style="color: red;"> Grid.Column</span>
          <span style="color: blue;">="0"</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Adi</span>
          <span style="color: blue;">}"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">TextBlock</span>
          <span style="color: red;"> Foreground</span>
          <span style="color: blue;">="Red"</span>
          <span style="color: red;"> Grid.Column</span>
          <span style="color: blue;">="1"</span>
          <span style="color: red;"> Text</span>
          <span style="color: blue;">="{</span>
          <span style="color: #a31515;">Binding</span>
          <span style="color: red;"> Soyadi</span>
          <span style="color: blue;">}"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">
            <strong>&lt;/</strong>
          </span>
          <span style="color: #a31515;">
            <strong>DataTemplate</strong>
          </span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox.<strong>ItemTemplate</strong></span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">input</span>
          <span style="color: blue;">:</span>
          <span style="color: #a31515;">AutoCompleteBox</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Kod içerisinde de gördüğünüz üzere AutoCompleteBox'ın ItemTemplate'i aslında
kendi içerisinde <strong>AutoComplete</strong> kısmında tekrar ettiği satırları tanımlıyor.
Bu satırların tasarımı aslında arkaplanda bir ListBox'ın Item'larıdır. Bizim
örneğimizde ulaşmaya çalıştığımız işlevsellik iki veya daha çok Property'i kullanıcıya
gösterirken arka plandaki filtrelememiz ile de bir AutoComplete işlevselliği sağlamak.
Zaten hali hazırda AutoCompleteBox'ımıza nesnelerimizi ItemsSource üzerinden aktardığımız
için o nesnelerin tüm Property'lerine dair Binding'leri de ItemTemplate içerisinde
ayarlayabiliyoruz.
</p>
        <p align="center">
          <img border="1" alt="AutoComplete kısmı özelleştirilmiş bir AutoCompleteBox." height="298" src="http://daron.yondem.com/tr/content/binary/22062009_4.png" width="539" />
          <br />
          <em>AutoComplete kısmı özelleştirilmiş bir AutoCompleteBox.</em>
        </p>
        <p style="color:maroon;">
          <strong>Taktikler</strong>
        </p>
        <p>
Eğer herhangi bir AutoCompleteBox'ın ItemsSource'una kendi tanımladığınız
tiplerden oluşan listeler verirseniz AutoComplete bölümünde saçma metinler görebilirsiniz.
Normal şartlarda bir String Array vs verildiğinde herhangi bir sorun olmuyor fakat
kendi tanımladığınız sınıflarda veya web servislerinden Proxy aracılığı ile aldığınız
sınıflarda sorun yaşayabilirsiniz. Bu durumu düzeltmenin yolu kendi sınıflarınız için
birer <strong>ToString</strong> extension'ı yazmak olabilir. AutoCompleteBox kendisine
verilen tüm nesnelerin üzerinden ToString metodunu çağırarak gelen metni AutoComplete
kısmında gösterir. O nedenle siz de kendi sınıflarınızda ToString'i override ederek
kendi istediğiniz verileri geri döndürebilirsiniz.
</p>
        <p>
          <strong>[VB]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">Namespace</span> ServiceReference1
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">Partial</span><span style="color: blue;">Public</span><span style="color: blue;">Class</span> Service1Urun
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">Public</span><span style="color: blue;">Overrides</span><span style="color: blue;">Function</span> ToString() <span style="color: blue;">As</span><span style="color: blue;">String</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">Return</span><span style="color: blue;">Me</span>.Adi
&amp; <span style="color: blue;">Me</span>.Soyadi
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">End</span><span style="color: blue;">Function</span></p>
        <p style="margin: 0px;">
    <span style="color: blue;">End</span><span style="color: blue;">Class</span></p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">End</span>
          <span style="color: blue;">Namespace</span>
        </p>
        <p>
          <strong>[C#]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">namespace</span> ServiceReference1
</p>
        <p style="margin: 0px;">
{
</p>
        <p style="margin: 0px;">
    <span style="color: blue;">public</span><span style="color: blue;">partial</span><span style="color: blue;">class</span><span style="color: #2b91af;">Service1Urun</span></p>
        <p style="margin: 0px;">
    {
</p>
        <p style="margin: 0px;">
        <span style="color: blue;">public</span><span style="color: blue;">override</span><span style="color: blue;">string</span> ToString()
</p>
        <p style="margin: 0px;">
        {
</p>
        <p style="margin: 0px;">
            <span style="color: blue;">return</span><span style="color: blue;">this</span>.Adi
+ <span style="color: blue;">this</span>.Soyadi;
</p>
        <p style="margin: 0px;">
        }
</p>
        <p style="margin: 0px;">
    }
</p>
        <p style="margin-top: 0px;">
}
</p>
        <p>
Yukarıdaki örnek kod içerisinde ServiceReference1 adında bir servis referansı ile
beraber gelen Service1Urun adındaki nesnenin ToString metodunu override ediyoruz.
Artık söz konusu nesneden sonra ToString denildiğinde buradaki Function çalışacak
ve nesnenin <strong>Adi</strong> ile <strong>Soyadi</strong> Property'lerini birleştirerek
geri döndürecek. Böylece AutoCompleteBox da bu ToString'den gelen veriyi gösterebilecek.
</p>
        <p style="color:maroon;">
          <strong>Otomatik seçilseler...</strong>
        </p>
        <p>
AutoComplete listesini gösteriyorsunuz fakat her seferinde kullanıcının bir kayıt
seçmek zorunda kalmasını da istemiyorsunuz. Belki de en uygun seçecek hemen seçilebilir
şekilde gelse? Nasıl mı?
</p>
        <p align="center">
          <img border="1" alt="IsTextCompletionEnabled = True olursa..." height="310" src="http://daron.yondem.com/tr/content/binary/22062009_3.png" width="444" />
          <br />
          <em>IsTextCompletionEnabled = True olursa...</em>
        </p>
        <p>
AutoCompleteBox'ın <strong>IsTextCompletionEnabled</strong> özelliği True yaparsanız
yukarıdaki gibi kullanıcılar metin girişi yaparken bir yandan da en uygun seçeneği
seçtirebilirsiniz. Böylece anında seçimi onaylayarak kullanıcılar hızlıca işleme devam
edebilirler.
</p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=e8feabdc-bac0-438f-bd6f-7eb6793a01e0" />
      </body>
      <title>Silverlight Toolkit'ten AutoCompleteBox kullanımı.</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/crvprlm3vFI/PermaLink.aspx</link>
      <pubDate>Mon, 22 Jun 2009 12:32:11 GMT</pubDate>
      <description>&lt;p&gt;
Bu yazımızda &lt;a href="http://www.codeplex.com/Silverlight" target="_blank"&gt; Silverlight
Toolkit&lt;/a&gt; ile beraber gelen &lt;strong&gt;AutoCompleteBox&lt;/strong&gt; kontrolünü inceleyeceğiz.
Bilgisayarınızda Silverlight Toolkit yükledikten sonra Toolkit içerisindeki tüm kontrolleri
Visual Studio içerisinde Toolbox&amp;#39;ta görebilirsiniz. Ayrıca Toolkit DLL&amp;#39;lerini
referans alarak kontrolleri elle XAML sayfalarınıza ekleme şansınız da var. Örneğin
AutoCompleteBox kontrolünü inceleyecek olursak; bir sayfaya söz konusu kontrolü eklemek
için ilk olarak Toolkit Assembly&amp;#39;lerinden &lt;strong&gt;System.Windows.Controls.Input&lt;/strong&gt; Assembly&amp;#39;sini
projenize referans almanız sonrasında da &lt;strong&gt;System.Windows.Controls&lt;/strong&gt; NameSpace&amp;#39;i
altından kontrolü bulmanız gerekecektir.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; &lt;strong&gt;xmlns&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;input&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input&amp;quot;&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication54.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;input&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;input&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda gördüğünüz basit örnek içerisinde XAML root elementimizde gerekli input XML
namespace&amp;#39;i tanımlanmış durumda. Böylece artık input namespace&amp;#39;i üzerinden &lt;strong&gt;AutoCompleteBox&lt;/strong&gt; kontrolümüzü
kullanabiliriz. Daha önce de bahsettiğim üzere eğer Visual Studio&amp;#39;nun Toolbox&amp;#39;ından
söz konusu kontrolü kod tarafına sürükle bırak tekniği ile yerleştirirseniz zaten
tüm bu işlemleri otomatik olarak gerçekleştirilebiliyor.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Haydi veriye bağlayalım!&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Kontrolümüzü artık sahneye yerleştirdiğimize göre hemen çalıştırmak ve sonucu görmek
isteyeceğiz fakat onun öncesinde tabi ki bir veri bağlantısı yapmamız şart. Kullanıcılar
kutuya birşey yazarken AutoComplete kısmında neler gösterilecek?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication54.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;myAutoCompleteBox&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Top&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Loaded
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; Secenekler() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt; =
{&lt;span style="color: #a31515;"&gt;&amp;quot;Silverlight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Silvernight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Silverfight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;SilverMonth&amp;quot;&lt;/span&gt;}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemsSource = Secenekler
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;RoutedEventArgs&lt;/span&gt; e)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;string&lt;/span&gt;[]
Secenekler = { &lt;span style="color: #a31515;"&gt;&amp;quot;Silverlight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Silvernight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;Silverfight&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;&amp;quot;SilverMonth&amp;quot;&lt;/span&gt; };
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemsSource
= Secenekler;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kod içerisinde aslında basit bir şekilde tüm seçenekleri doğrudan AutoCompletebox&amp;#39;ın &lt;strong&gt;ItemsSource&amp;#39;una&lt;/strong&gt; atamış
oluyoruz. Sonrasında AutoCompleteBox kendi içerisinde gerekli filtrelemeleri kullanıcılar
metin giriş yaptıkça gerçekleştirerek sonucu gösteriyor.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Silverlight içerisinde basit bir AutoCompleteBox" height="174" src="http://daron.yondem.com/tr/content/binary/22062009_1.png" width="427"&gt;
&lt;br&gt;
&lt;em&gt;Silverlight içerisinde basit bir AutoCompleteBox&lt;/em&gt;
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Peki ya web servisinden alacak olsak sonuçları?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Bir önceki örneği incelerken büyük ihtimal ile kendi içinizden &amp;quot;&lt;em&gt;Eee peki
kocaman bir listemiz varsa hepsini istemciye mi alacağız?&lt;/em&gt;&amp;quot; diye sormuşsunuzdur.
Tabi ki hayır. Aslında normal şartlarda yapmamız gereken şey AutoCompleteBox içerisine
yazılan kelimeyi sunucuya göndermek ve geri gelen sonucu da AutoCompleteBox&amp;#39;ın
AutoComplete bölümünde göstermek. İşte bu işlemi yapabilmek için AutoCompletebox&amp;#39;ın &lt;strong&gt;Populating&lt;/strong&gt; eventını
kullanıyoruz.
&lt;/p&gt;
&lt;p&gt;
Örneğimizde &lt;strong&gt;Tavsiye&lt;/strong&gt; adında bir webmethod kullanacağız. Web servisinin
yazımı kısmına girmeyeceğim fakat kabaca bahsetmek gerekirse istemciden aranacak kelimeyi
alan ve veritabanına gidip uygun AutoComplete seçeneklerini bir list olarak döndüren
bir webmethod yeterli olacaktır.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; myAutoCompleteBox_Populating(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.Controls.PopulatingEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; myAutoCompleteBox.Populating
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = &lt;span style="color: blue;"&gt;True&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; servis &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;New&lt;/span&gt; ServiceReference1.Service1Client
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AddHandler&lt;/span&gt; servis.TavsiyelerCompleted, &lt;span style="color: blue;"&gt;AddressOf&lt;/span&gt; Servis_TavsiyelerCompleted
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; servis.TavsiyelerAsync(myAutoCompleteBox.Text)
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; MainPage()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Loaded
+= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;RoutedEventHandler&lt;/span&gt;(MainPage_Loaded);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.Populating
+= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;PopulatingEventHandler&lt;/span&gt;(myAutoCompleteBox_Populating);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;void&lt;/span&gt; myAutoCompleteBox_Populating(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af;"&gt;PopulatingEventArgs&lt;/span&gt; e)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ServiceReference1.Service1Client
servis = &lt;span style="color: blue;"&gt;new&lt;/span&gt; ServiceReference1.Service1Client();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; servis.TavsiyelerCompleted
+= Servis_TavsiyelerCompleted;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; servis.TavsiyelerAsync(myAutoCompleteBox.Text);
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki kodumuzda AutoCompleteBox&amp;#39;ın &lt;strong&gt;Populating&lt;/strong&gt; durumunu yakalayarak
hemen&lt;strong&gt; e.Cancel&lt;/strong&gt; değerini &lt;strong&gt;True&lt;/strong&gt; yaparak &lt;strong&gt;Populate&lt;/strong&gt; işlemini
iptal ediyoruz. Neden mi? Çünkü Populate işlemi, yani AutoComplete listesinin gösterilmesi
işlemi şu anda yapılamaz. İşlemi yapabilmek için bizim Webmethod&amp;#39;umuza parametreyi
vermemiz, söz konusu bilginin sunucuya gitmesi ve en önemli cevabın gelmesi gerekiyor!
Cevap gelmeden &lt;strong&gt;Populate&lt;/strong&gt; edemeyiz! O nedenle burada hemen &lt;strong&gt;Populate&lt;/strong&gt; işlemini
iptal ediyoruz. Sonrasında WebServis&amp;#39;imizden bir kopya alıp &lt;strong&gt;Completed&lt;/strong&gt; durumu
da ayrı bir handler&amp;#39;a bağlayıp elimizdeki AutoCompleteBox içerisinde metni &lt;strong&gt;Tavsiyeler&lt;/strong&gt; adındaki
Webmethod&amp;#39;umuza gönderiyoruz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Servis_TavsiyelerCompleted(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; ServiceReference1.TavsiyelerCompletedEventArgs)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemsSource = e.Result
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.PopulateComplete()
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Servis_TavsiyelerCompleted(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender,
ServiceReference1.TavsiyelerCompletedEventArgs e)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemsSource
= e.Result;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.PopulateComplete();
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Populating durumunda çağırdığımız web servisimizin Completed durumunda artık veri
elimizde olduğunda göre doğrudan AutoCompleteBox&amp;#39;ımızın &lt;strong&gt; ItemsSource&amp;#39;una&lt;/strong&gt; verebiliriz.
Son olarak tabi ki Populate işlemini bitirdiğimizi de AutoCompleteBox&amp;#39;a belirtmemiz
gerek ki hemen sonucu kullanıcıya göstersin.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Arama şeklini nasıl değiştiririz?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Varsayılan ayarları ile AutoCompleteBox&amp;#39;lar kendilerine verilen verinin içinde
arama yaparken kullanıcının yazdığı metinile başlayan sonuçları gösterirler. Bunun
değiştirmenin yolu AutoCompletebox&amp;#39;ların SearchMode özelliğinde yatıyor.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Veri kaynağında nasıl arama yapılacağını belirleyin." height="293" src="http://daron.yondem.com/tr/content/binary/22062009_2.png" width="639"&gt;
&lt;br&gt;
&lt;em&gt;Veri kaynağında nasıl arama yapılacağını belirleyin.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Peki bu arama sistemleri size yetmedi ve daha da özelleştirmek isterseniz ne yapabilirsiniz?
Filtreleme işlemini tamamen ele alma şansınız da var. Bu durum özellikle AutoCompleteBox&amp;#39;a
kendi nesne tiplerinizi bağladığınızda çok anlamlı olabilir. Filtreleme esnasından
belki de sadece ItemsSource&amp;#39;a verdiğiniz nesnelerin belirli Property&amp;#39;lerine
göre ayrı ayrı mantıklarıda aramalar yapılsın isteyebilirsiniz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; MainPage_Loaded(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style="color: blue;"&gt;Handles&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Loaded
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemFilter = &lt;span style="color: blue;"&gt;AddressOf&lt;/span&gt; Arama
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; Arama(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; metin &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; nesne &lt;span style="color: blue;"&gt;As&lt;/span&gt; ServiceReference1.Service1Urun) &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; nesne.Adi.Contains(metin) &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;True&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;False&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; MainPage()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; myAutoCompleteBox.ItemFilter
= Arama;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; Arama(&lt;span style="color: blue;"&gt;string&lt;/span&gt; metin,
ServiceReference1.Service1Urun nesne)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (nesne.Adi.Contains(metin))
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki örneğimizde AutoCompleteBox&amp;#39;ın &lt;strong&gt;ItemFilter&amp;#39;ına&lt;/strong&gt; yeni
bir metod atıyoruz. Bu metod parametre olarak o anda &lt;strong&gt;filtrelenmek&lt;/strong&gt; istenen &lt;strong&gt;Item&amp;#39;ı&lt;/strong&gt;,
yani benim örneğimde &lt;strong&gt;ServiceReference&lt;/strong&gt; ile beraber gelen tipte bir
nesneyi ve filtrelemede kullanılacak metni alıyor. Sonrasında gerekli kontrolleri
yaptıktan sonra geriye filtrelediğiniz her bir nesnenin gösterilip gösterilmeyeceğine
dair birer &lt;strong&gt;Boolean&lt;/strong&gt; değer döndürmeniz yeterli olacaktır.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Görsel özelleştirmeler...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Makalemizde incelediğimiz tüm özellikleri kullandınız, kendi nesnelerinizi web servisi
ile döndürdünüz ve özel bir filtrelemede de eklediniz. Fakat AutoComplete listesinde
daha çok detay göstermek istiyorsunuz. Bu durumda gelin AutoCompleteBox&amp;#39;ın ItemTemplate&amp;#39;ini
bir inceleyelim.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;myAutoCompleteBox&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Top&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox.&lt;strong&gt;ItemTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; &lt;/strong&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;DataTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt; &lt;span style="color: red;"&gt; HorizontalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Stretch&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Auto&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;250&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ColumnDefinition&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;250&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid.ColumnDefinitions&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Foreground&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Red&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Adi&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color: red;"&gt; Foreground&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Red&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Text&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color: red;"&gt; Soyadi&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;DataTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox.&lt;strong&gt;ItemTemplate&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;input&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: #a31515;"&gt;AutoCompleteBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Kod içerisinde de gördüğünüz üzere AutoCompleteBox&amp;#39;ın ItemTemplate&amp;#39;i aslında
kendi içerisinde &lt;strong&gt;AutoComplete&lt;/strong&gt; kısmında tekrar ettiği satırları tanımlıyor.
Bu satırların tasarımı aslında arkaplanda bir ListBox&amp;#39;ın Item&amp;#39;larıdır. Bizim
örneğimizde ulaşmaya çalıştığımız işlevsellik iki veya daha çok Property&amp;#39;i kullanıcıya
gösterirken arka plandaki filtrelememiz ile de bir AutoComplete işlevselliği sağlamak.
Zaten hali hazırda AutoCompleteBox&amp;#39;ımıza nesnelerimizi ItemsSource üzerinden aktardığımız
için o nesnelerin tüm Property&amp;#39;lerine dair Binding&amp;#39;leri de ItemTemplate içerisinde
ayarlayabiliyoruz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="AutoComplete kısmı özelleştirilmiş bir AutoCompleteBox." height="298" src="http://daron.yondem.com/tr/content/binary/22062009_4.png" width="539"&gt;
&lt;br&gt;
&lt;em&gt;AutoComplete kısmı özelleştirilmiş bir AutoCompleteBox.&lt;/em&gt;
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Taktikler&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Eğer herhangi bir AutoCompleteBox&amp;#39;ın ItemsSource&amp;#39;una kendi tanımladığınız
tiplerden oluşan listeler verirseniz AutoComplete bölümünde saçma metinler görebilirsiniz.
Normal şartlarda bir String Array vs verildiğinde herhangi bir sorun olmuyor fakat
kendi tanımladığınız sınıflarda veya web servislerinden Proxy aracılığı ile aldığınız
sınıflarda sorun yaşayabilirsiniz. Bu durumu düzeltmenin yolu kendi sınıflarınız için
birer &lt;strong&gt;ToString&lt;/strong&gt; extension&amp;#39;ı yazmak olabilir. AutoCompleteBox kendisine
verilen tüm nesnelerin üzerinden ToString metodunu çağırarak gelen metni AutoComplete
kısmında gösterir. O nedenle siz de kendi sınıflarınızda ToString&amp;#39;i override ederek
kendi istediğiniz verileri geri döndürebilirsiniz.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[VB]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;Namespace&lt;/span&gt; ServiceReference1
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Partial&lt;/span&gt; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; Service1Urun
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Overrides&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt; ToString() &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Return&lt;/span&gt; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Adi
&amp;amp; &lt;span style="color: blue;"&gt;Me&lt;/span&gt;.Soyadi
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Function&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Namespace&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[C#]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;namespace&lt;/span&gt; ServiceReference1
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;partial&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Service1Urun&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;override&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; ToString()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Adi
+ &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Soyadi;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
}
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki örnek kod içerisinde ServiceReference1 adında bir servis referansı ile
beraber gelen Service1Urun adındaki nesnenin ToString metodunu override ediyoruz.
Artık söz konusu nesneden sonra ToString denildiğinde buradaki Function çalışacak
ve nesnenin &lt;strong&gt;Adi&lt;/strong&gt; ile &lt;strong&gt;Soyadi&lt;/strong&gt; Property&amp;#39;lerini birleştirerek
geri döndürecek. Böylece AutoCompleteBox da bu ToString&amp;#39;den gelen veriyi gösterebilecek.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Otomatik seçilseler...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
AutoComplete listesini gösteriyorsunuz fakat her seferinde kullanıcının bir kayıt
seçmek zorunda kalmasını da istemiyorsunuz. Belki de en uygun seçecek hemen seçilebilir
şekilde gelse? Nasıl mı?
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="IsTextCompletionEnabled = True olursa..." height="310" src="http://daron.yondem.com/tr/content/binary/22062009_3.png" width="444"&gt;
&lt;br&gt;
&lt;em&gt;IsTextCompletionEnabled = True olursa...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
AutoCompleteBox&amp;#39;ın &lt;strong&gt;IsTextCompletionEnabled&lt;/strong&gt; özelliği True yaparsanız
yukarıdaki gibi kullanıcılar metin girişi yaparken bir yandan da en uygun seçeneği
seçtirebilirsiniz. Böylece anında seçimi onaylayarak kullanıcılar hızlıca işleme devam
edebilirler.
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=e8feabdc-bac0-438f-bd6f-7eb6793a01e0" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=e8feabdc-bac0-438f-bd6f-7eb6793a01e0</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</wfw:commentRss>
      <slash:comments>14</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Uzun süredir bu anı bekliyordum :) Açık kaynak kodu üreten ve tüketen bir yazılımcı
olarak bu konuda bilgi ve birikimlerimizi birbirimiz ile paylaşmanın zamanı geldi.
Bu sefer çok daha farklı bir etkinlik beraber olacağız. 
</p>
        <p align="center">
          <img border="1" alt="Açık kaynak destekçisi herkesi bekliyoruz!" height="400" src="http://daron.yondem.com/tr/content/binary/16062009_1.jpg" width="600" />
        </p>
        <p>
Gördüğünüz üzere bu sefer oturumlarımız yarım saatlik ve konuşmacılarımız da sizin
aranızdan kişiler. Eğer siz de benim gibi açık kaynak kodu destekliyor, açık kaynak
kodu üretiyor veya tüketiyorsanız hiç fark etmez, hepinizi 27 Haziran'da bu Organik
etkinliğe bekliyoruz!
</p>
        <p>
Kayıt olmayı unutmayın : <a target="_blank" href="http://www.inetatr.org">www.inetatr.org</a></p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea" />
      </body>
      <title>Organik Yazılım Günü'nde görüşürüz!</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/t78tc3qWfi8/PermaLink.aspx</link>
      <pubDate>Tue, 16 Jun 2009 16:31:38 GMT</pubDate>
      <description>&lt;p&gt;
Uzun süredir bu anı bekliyordum :) Açık kaynak kodu üreten ve tüketen bir yazılımcı
olarak bu konuda bilgi ve birikimlerimizi birbirimiz ile paylaşmanın zamanı geldi.
Bu sefer çok daha farklı bir etkinlik beraber olacağız. 
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Açık kaynak destekçisi herkesi bekliyoruz!" height="400" src="http://daron.yondem.com/tr/content/binary/16062009_1.jpg" width="600"&gt;
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz üzere bu sefer oturumlarımız yarım saatlik ve konuşmacılarımız da sizin
aranızdan kişiler. Eğer siz de benim gibi açık kaynak kodu destekliyor, açık kaynak
kodu üretiyor veya tüketiyorsanız hiç fark etmez, hepinizi 27 Haziran&amp;#39;da bu Organik
etkinliğe bekliyoruz!
&lt;/p&gt;
&lt;p&gt;
Kayıt olmayı unutmayın : &lt;a target="_blank" href="http://www.inetatr.org"&gt;www.inetatr.org&lt;/a&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</comments>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=4227becb-f4b2-4f05-9b5b-fcd61f5f44ea</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Silverlight 3.0 ile beraber gelen en ilgi çekici özelliklerden biri 3D desteği. Bu
makalemizde Silverlight ile beraber gelen 3D özelliklerine bakmadan önce aslında nasıl
bir 3D mantığı ile karşı karşıya olduğumuzu netleştirmekte fayda var. Özellikle Silverlight
öncesi WPF ile ilgilnenlerin 3D beklentisi eminim ki çok yüksek olacaktır. Tabi daha
öncesinde 3D oyun programlama ile ilgilenenleri liste dışında tutuyoruz :) amacımız
zaten oyun tarafı değil. 
</p>
        <p>
WPF içerisinde alıştığımız yapıdaki 3D ortamda istediğimiz bir 3D objeyi alarak X,
Y ve Z koordinatları ile doğrudan kontrol edebiliyorduk oysa Silverlight tarafındaki
3D desteği biraz daha farklı. Aslında bakılırsa tam olarak 3D desteği olarak da adlandırılmıyor
söz konusu mekanizma. Esas bahsedilen özelliğin adı "3D Plane" olarak geçiyor.
Peki bunun anlamı nedir? Özetlemek gerekirse aslında Silverlight içerisindeki 3D desteği
sadece 3D ortam şeklinde. Yani sadece içerisinde bulunduğunuz ortam 3D :) elinizdeki
nesneler 3D değil. 
</p>
        <p style="color:maroon;">
          <strong>Ne? Nasıl?</strong>
        </p>
        <p>
Elinizde iki boyutlu bir nesne olduğunu düşünün. Aslında çok basit bir şekilde bir
TextBox düşünseniz de yeterli olacaktır. Bir TextBox nesnesi 3D bir nesne midir? Yani
kalınlığı var mıdır? Hayır, bir TextBox'ın sadece genişlik ve yüksekliği vardır.
İşte bu şekilde 2D nesneleri Silverlight içerisinde artık sanki 3D ortamdaymış gibi
gösterebiliyorsunuz. Özünde bahsettiğimiz şey <strong> 3D Projection</strong> (Yansıtma).
Nasıl ki elimizdeki 2D nesnelere <strong> RenderTransform'lar</strong> uygulayarak
iki boyutlu ortamda istediğimiz gibi manipüle edebiliyorduysak artık Silverlight içerisinde
tüm görsel nesneleri 3D ortamda da manipüle edebiliyorsunuz. Gelin hemen hızlı bir
örnek ile konuya girelim.
</p>
        <p align="center">
          <img border="1" alt="Farklı 3D Transform'lar uygulanmış ComboBox'lar." height="188" src="http://daron.yondem.com/tr/content/binary/07062009_1.jpg" width="600" />
          <br />
          <em>Farklı 3D Transform'lar uygulanmış ComboBox'lar.</em>
        </p>
        <p>
Yukarıdaki ekran görüntüsünde aslında basit bir <strong>ComboBox</strong> görüyorsunuz
fakat söz konusu ComboBox sanki üç boyutlu ortamdaymış gibi döndürülmüş hatta görüntülerden
birinde arkasına çevrilmiş. Tüm bu mekanizma animasyonlar dahil çalışırken eldeki
nesneleriniz hepsi "arkası döndürüldüğünde" bile kullanılabilir olmaya devam
ediyor. Düşünün, tüm bunlar animasyonlar ile birleştirildiğide üç boyutlu ortamda
gezen kontroller şeklinde :) ne kadar ilginç arayüzler yaratılabilir.
</p>
        <p style="color:maroon;">
          <strong>Kod tarafına geçiş yapalım...</strong>
        </p>
        <p>
Kod tarafında herhangi bir nesneyi 3D ortamdaymış gibi ekrana yansıtmak istiyorsanız
yapmanız gereken söz konusu nesne için hemen bir <strong>Projection</strong> tanımlamak.
Şu an için Silverlight içerisinde sadece <strong>PlaneProjection</strong> destekleniyor
o nedenle tek seçeneğimiz var.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication43.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBox</span>
          <span style="color: red;"> Width</span>
          <span style="color: blue;">="200"</span>
          <span style="color: red;"> Height</span>
          <span style="color: blue;">="20"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBox.Projection</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">
            <strong>&lt;</strong>
          </span>
          <span style="color: #a31515;">
            <strong>PlaneProjection</strong>
          </span>
          <span style="color: red;">
            <strong> RotationX</strong>
          </span>
          <span style="color: blue;">
            <strong>="208"</strong>
          </span>
          <strong>
          </strong>
        </p>
        <p style="margin: 0px;">
          <strong>               
                </strong>
          <span style="color: red;">
            <strong>CenterOfRotationY</strong>
          </span>
          <span style="color: blue;">
            <strong>="1"</strong>
          </span>
          <strong>
          </strong>
        </p>
        <p style="margin: 0px;">
          <strong>               
                </strong>
          <span style="color: red;">
            <strong>CenterOfRotationX</strong>
          </span>
          <span style="color: blue;">
            <strong>="1"</strong>
          </span>
          <strong>
          </strong>
        </p>
        <p style="margin: 0px;">
          <strong>               
                </strong>
          <span style="color: red;">
            <strong>RotationY</strong>
          </span>
          <span style="color: blue;">
            <strong>="33"</strong>
          </span>
          <strong>
          </strong>
        </p>
        <p style="margin: 0px;">
          <strong>               
                </strong>
          <span style="color: red;">
            <strong>GlobalOffsetY</strong>
          </span>
          <span style="color: blue;">
            <strong>="15"</strong>
          </span>
          <strong>
          </strong>
        </p>
        <p style="margin: 0px;">
          <strong>               
                </strong>
          <span style="color: red;">
            <strong>GlobalOffsetX</strong>
          </span>
          <span style="color: blue;">
            <strong>="35"/&gt;</strong>
          </span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ComboBox.Projection</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBox.Items</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: red;"> Content</span>
          <span style="color: blue;">="Seçenek
1"&gt;&lt;/</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: red;"> Content</span>
          <span style="color: blue;">="Seçenek
1"&gt;&lt;/</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: red;"> Content</span>
          <span style="color: blue;">="Seçenek
1"&gt;&lt;/</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: red;"> Content</span>
          <span style="color: blue;">="Seçenek
1"&gt;&lt;/</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: red;"> Content</span>
          <span style="color: blue;">="Seçenek
1"&gt;&lt;/</span>
          <span style="color: #a31515;">ComboBoxItem</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ComboBox.Items</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ComboBox</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Bir önceki bölümde sizinle paylaştığım ekran görüntüsünde sağ tarafta bulunan ComboBox'ın
XAML kodunu yukarıda bulabilirsiniz. Burada önemli olan şey ComboBox'ın <strong>Projection</strong> özelliğine
atanmış olan <strong> PlaneProjection</strong> nesnesi. Söz konusu PlaneProjection
nesnesinin birçok özelliği set edilmiş durumda. İşte biz de makalemizin geri kalanında
bu özelliklerin anlamlarına göz atacağız.
</p>
        <p style="color:maroon;">
          <strong>RotationX, RotationY, RotationZ</strong>
        </p>
        <p>
İsimlerinden de anlaşılacağı üzere bu özellikler bir şekilde elimizdeki nesnenin üç
boyutlu ortamda kaç derece ile döndürüleceğini belirliyor. Peki X, Y ve Z derken neyi
kast ediyorlar? Hemen gözünüzde üç boyutlu bir ortam canlandırın ve söz konusu ortadam
ComboBox'ımızı koyalım. ComboBox'ı etrafında döndürebileceğiniz aslında üç
adet eksen vardır. Bunlardan birincisi X ekseki. Eğer X ekseki etrafında ComboBox'ı
döndürmek istiyorsanız RotationX değerine gerekli açıyı verebilirsiniz. Aynı şekilde
Y ve Z eksenleri etrafında da eldeki nesne döndürülecekse rahatlıkla özelliklere de
açı değerleri vererek istediğiniz sonucu alabilirsiniz.
</p>
        <p align="center">
          <img border="1" alt="Eksenler ve Rotation özellikleri..." height="454" src="http://daron.yondem.com/tr/content/binary/07062009_2.gif" width="500" />
          <br />
          <em>Eksenler ve Rotation özellikleri...</em>
        </p>
        <p>
Yukarıdaki görsel içerisinde X, Y ve Z eksenlerini ve etraflarında döndürülmüş Button
görsellerini inceleyebilirsiniz. Bu noktada dikkat edilmesi gereken detaylardan biri
de aslında eksenlerin gerçekten de her nesnenin tam ortasından geçiyor olması. Her
görsel nesne kendi X, Y ve Z eksenlerine sahip ve bunlar varsayılan ayarlarda nesnenin
tam ortasından geçecek şekilde ayarlanmış. Örneğin X ekseni etrafında 45 derece döndürülen
bir Button eksen tam da Button'un ortasından geçtiği için kendi merkezi etrafında
dönüyormuş gibi gözüküyor. 
</p>
        <p>
İsterseniz eksenlerin yerlerini değiştirme şansınız da var. Tüm eksenler varsayılan
ayarları ile nesnelerin tam ortasından geçersen harici Offset değerleri ayarlanabiliyor.
Offset değerleri bilindiği üzere 0 ile 1 arasında nesnenin sol üst köşesinden başlayarak
sağ alt köşesine gider. Eğer X eksenine 0 Offset değerini verirseniz bu X ekseninin
düğmenin en üstüne denk geleceği anlamına gelir. Aynı şekilde eğer 1 değerini verirseniz
ekseni düğmenin en alt noktasına itmiş olursunuz.
</p>
        <p align="center">
          <img border="1" alt="CenterOfRotation ayarları." height="166" src="http://daron.yondem.com/tr/content/binary/07062009_3.gif" width="500" />
          <br />
          <em>CenterOfRotation ayarları.</em>
        </p>
        <p>
Eksenin yerini değiştirmiş olmak artık düğmemizin kendi merkezine göre değilde üst
noktasına göre veya alt noktasına göre dönmesini sağlayacaktır. <strong>CenterOfRotation</strong> olarak
geçen bu özelliğin <strong>X, Y ve Z</strong> Offset değerlerini ayrı ayrı düzenleyebiliyorsunuz.
Yukarıdaki görselde de görebileceğiniz üzere aslında X ekseninin Y eksenine göre ne
kadar aşağıda veya yukarıda olacağını ayarlıyoruz. O nedenle düğmenizin X eksenin <strong>Offset</strong> değeri
olarak ne kadar uzak olacağına dair bilgiyi <strong>CenterOfRotationY</strong> değerine
atamanız gerekiyor. Aynı şekilde diğer eksenler için de <strong> CenterOfrotationX</strong> ve <strong>CenterOfRotationZ</strong> özellikleri
de mevcut.
</p>
        <p style="color:maroon;">
          <strong>GlobalOffset ve LocalOffset ayarları.</strong>
        </p>
        <p>
Şu ana kadar eksenleri etrafında nesnelerin ne açı ile döneceklerini ve eksenlerin
nesnelerin neresine denk geleceğini ayarladık. Oysa başka dertlerimiz de olabilir.
Bunlardan en basiti tüm işlemleri yaparken nesneyi uygulama genelinde Global olarak
da posizyonlandırmak isteyebilirsiniz. İşte üç boyutlu ortamda nesnenize Global bir
pozisyon vermek istiyorsanız kullanacağınız özellikleri <strong>GlobalOffsetX</strong>, <strong>GlobalOffsetY</strong> ve <strong>GlobalOffsetZ</strong> özellikleri
olacaktır. Bu özellikler kesinlikle animasyonunuzu veya nesnenin nasıl döneceğini
vs değiştirmez. Nesneyi kendi X, Y ve Z eksenleri ile beraber Global, uygulama bazında
ayrı bir X, Y ve Z ekseni üzerinden tekrar pozusyonlandırdığınızı düşünebilirsiniz.
</p>
        <p>
Gelelim animasyonlarınızı en hareketli ve janjanlı hale getirecek olan son özelliğe;
LocalOffset! Adından da anlaşılacağı üzere aslınad yine nesnenizi bir şeyden uzaklaştırıyorsunuz
fakat bu sefer global anlamda değil. Nesnenin kendi içinde belirlenen açılarla etrafında
döndüğü eksenlerden devasa miktarlarda uzaklaştırılarak sanki uzaklardan bir yerden
geliyormuş efekti ile ekrana gelmesini sağlayan mekanizma LocalOffset'tir. Düşünün
ki nesneniz ekseni etrafında değil de ekseninden 50 piksel uzakta bir dairede dönüyor?
Nasıl gözükürdü?
</p>
        <p align="center">
          <img border="1" alt="Ekseninden uzaklarda dönen bir Button." height="291" src="http://daron.yondem.com/tr/content/binary/07062009_4.gif" width="340" />
          <br />
          <em>Ekseninden uzaklarda dönen bir Button.</em>
        </p>
        <p>
Yukarıdaki görüntüden bir Button'un ekseninden uzakta dönmesi halinde nasıl bir
animasyon oluşabileceğini tahmin edebilirsiniz. Offset değerlerini arttırarak ve sadece
X değil farklı eksenlerde aynı anda açılar vererek animasyonlar hazırladığınızda nesnelerinizi
üç boyutlu ortamda istediğiniz gibi hareketlendirebiliyorsunuz. Tüm bu süreçte Button'un
sürekli olarak tıklanabilir kaldığını da hatırlatmak isterim.
</p>
        <p style="color:maroon;">
          <strong>Sonuç</strong>
        </p>
        <p>
Yukarıda bahsettiğimiz tüm özelliklere programatik erişimin haricinde animasyon içerisinde
de kullanabileceğiniz kesin. Özellikle unutulmaması gereken nokta Projection'ın
tüm nesnelere uygulanabiliyor olması, yani elinizde içi dolu bir <strong>StackPanel</strong> veya
bir <strong>DataGrid</strong> olabilir ve tüm bunları keni iç elementleri ile beraber
rahatlıkla anime edebilirsiniz. Hatta belki StackPanel'inizin içinde bir nesne
zaten kendi X, Y, Z koordinatlarına göre üç boyutlu bir animasyonu gerçekleştiriyordur
ve siz StackPanel'i de başka bir üç boyutlu animasyona alarak daha ilginç manzaralar
da yaratabilirsiniz.
</p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=9392035b-c1c2-4149-b4f7-066fce25dd6b" />
      </body>
      <title>Silverlight 3.0 içerisinde 3D Projection.</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/Enn2TJUjI4U/PermaLink.aspx</link>
      <pubDate>Sat, 13 Jun 2009 19:31:50 GMT</pubDate>
      <description>&lt;p&gt;
Silverlight 3.0 ile beraber gelen en ilgi çekici özelliklerden biri 3D desteği. Bu
makalemizde Silverlight ile beraber gelen 3D özelliklerine bakmadan önce aslında nasıl
bir 3D mantığı ile karşı karşıya olduğumuzu netleştirmekte fayda var. Özellikle Silverlight
öncesi WPF ile ilgilnenlerin 3D beklentisi eminim ki çok yüksek olacaktır. Tabi daha
öncesinde 3D oyun programlama ile ilgilenenleri liste dışında tutuyoruz :) amacımız
zaten oyun tarafı değil. 
&lt;/p&gt;
&lt;p&gt;
WPF içerisinde alıştığımız yapıdaki 3D ortamda istediğimiz bir 3D objeyi alarak X,
Y ve Z koordinatları ile doğrudan kontrol edebiliyorduk oysa Silverlight tarafındaki
3D desteği biraz daha farklı. Aslında bakılırsa tam olarak 3D desteği olarak da adlandırılmıyor
söz konusu mekanizma. Esas bahsedilen özelliğin adı &amp;quot;3D Plane&amp;quot; olarak geçiyor.
Peki bunun anlamı nedir? Özetlemek gerekirse aslında Silverlight içerisindeki 3D desteği
sadece 3D ortam şeklinde. Yani sadece içerisinde bulunduğunuz ortam 3D :) elinizdeki
nesneler 3D değil. 
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Ne? Nasıl?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Elinizde iki boyutlu bir nesne olduğunu düşünün. Aslında çok basit bir şekilde bir
TextBox düşünseniz de yeterli olacaktır. Bir TextBox nesnesi 3D bir nesne midir? Yani
kalınlığı var mıdır? Hayır, bir TextBox&amp;#39;ın sadece genişlik ve yüksekliği vardır.
İşte bu şekilde 2D nesneleri Silverlight içerisinde artık sanki 3D ortamdaymış gibi
gösterebiliyorsunuz. Özünde bahsettiğimiz şey &lt;strong&gt; 3D Projection&lt;/strong&gt; (Yansıtma).
Nasıl ki elimizdeki 2D nesnelere &lt;strong&gt; RenderTransform&amp;#39;lar&lt;/strong&gt; uygulayarak
iki boyutlu ortamda istediğimiz gibi manipüle edebiliyorduysak artık Silverlight içerisinde
tüm görsel nesneleri 3D ortamda da manipüle edebiliyorsunuz. Gelin hemen hızlı bir
örnek ile konuya girelim.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Farklı 3D Transform'lar uygulanmış ComboBox'lar." height="188" src="http://daron.yondem.com/tr/content/binary/07062009_1.jpg" width="600"&gt;
&lt;br&gt;
&lt;em&gt;Farklı 3D Transform'lar uygulanmış ComboBox'lar.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki ekran görüntüsünde aslında basit bir &lt;strong&gt;ComboBox&lt;/strong&gt; görüyorsunuz
fakat söz konusu ComboBox sanki üç boyutlu ortamdaymış gibi döndürülmüş hatta görüntülerden
birinde arkasına çevrilmiş. Tüm bu mekanizma animasyonlar dahil çalışırken eldeki
nesneleriniz hepsi &amp;quot;arkası döndürüldüğünde&amp;quot; bile kullanılabilir olmaya devam
ediyor. Düşünün, tüm bunlar animasyonlar ile birleştirildiğide üç boyutlu ortamda
gezen kontroller şeklinde :) ne kadar ilginç arayüzler yaratılabilir.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Kod tarafına geçiş yapalım...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Kod tarafında herhangi bir nesneyi 3D ortamdaymış gibi ekrana yansıtmak istiyorsanız
yapmanız gereken söz konusu nesne için hemen bir &lt;strong&gt;Projection&lt;/strong&gt; tanımlamak.
Şu an için Silverlight içerisinde sadece &lt;strong&gt;PlaneProjection&lt;/strong&gt; destekleniyor
o nedenle tek seçeneğimiz var.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication43.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox&lt;/span&gt;&lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;20&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox.Projection&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;PlaneProjection&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt; RotationX&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;208&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;CenterOfRotationY&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;1&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;CenterOfRotationX&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;1&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;RotationY&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;33&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;GlobalOffsetY&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;15&amp;quot;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;GlobalOffsetX&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;35&amp;quot;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox.Projection&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox.Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Se&amp;#231;enek
1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Se&amp;#231;enek
1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Se&amp;#231;enek
1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Se&amp;#231;enek
1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: red;"&gt; Content&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Se&amp;#231;enek
1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBoxItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox.Items&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ComboBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Bir önceki bölümde sizinle paylaştığım ekran görüntüsünde sağ tarafta bulunan ComboBox&amp;#39;ın
XAML kodunu yukarıda bulabilirsiniz. Burada önemli olan şey ComboBox&amp;#39;ın &lt;strong&gt;Projection&lt;/strong&gt; özelliğine
atanmış olan &lt;strong&gt; PlaneProjection&lt;/strong&gt; nesnesi. Söz konusu PlaneProjection
nesnesinin birçok özelliği set edilmiş durumda. İşte biz de makalemizin geri kalanında
bu özelliklerin anlamlarına göz atacağız.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;RotationX, RotationY, RotationZ&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
İsimlerinden de anlaşılacağı üzere bu özellikler bir şekilde elimizdeki nesnenin üç
boyutlu ortamda kaç derece ile döndürüleceğini belirliyor. Peki X, Y ve Z derken neyi
kast ediyorlar? Hemen gözünüzde üç boyutlu bir ortam canlandırın ve söz konusu ortadam
ComboBox&amp;#39;ımızı koyalım. ComboBox&amp;#39;ı etrafında döndürebileceğiniz aslında üç
adet eksen vardır. Bunlardan birincisi X ekseki. Eğer X ekseki etrafında ComboBox&amp;#39;ı
döndürmek istiyorsanız RotationX değerine gerekli açıyı verebilirsiniz. Aynı şekilde
Y ve Z eksenleri etrafında da eldeki nesne döndürülecekse rahatlıkla özelliklere de
açı değerleri vererek istediğiniz sonucu alabilirsiniz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Eksenler ve Rotation özellikleri..." height="454" src="http://daron.yondem.com/tr/content/binary/07062009_2.gif" width="500"&gt;
&lt;br&gt;
&lt;em&gt;Eksenler ve Rotation özellikleri...&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki görsel içerisinde X, Y ve Z eksenlerini ve etraflarında döndürülmüş Button
görsellerini inceleyebilirsiniz. Bu noktada dikkat edilmesi gereken detaylardan biri
de aslında eksenlerin gerçekten de her nesnenin tam ortasından geçiyor olması. Her
görsel nesne kendi X, Y ve Z eksenlerine sahip ve bunlar varsayılan ayarlarda nesnenin
tam ortasından geçecek şekilde ayarlanmış. Örneğin X ekseni etrafında 45 derece döndürülen
bir Button eksen tam da Button&amp;#39;un ortasından geçtiği için kendi merkezi etrafında
dönüyormuş gibi gözüküyor. 
&lt;/p&gt;
&lt;p&gt;
İsterseniz eksenlerin yerlerini değiştirme şansınız da var. Tüm eksenler varsayılan
ayarları ile nesnelerin tam ortasından geçersen harici Offset değerleri ayarlanabiliyor.
Offset değerleri bilindiği üzere 0 ile 1 arasında nesnenin sol üst köşesinden başlayarak
sağ alt köşesine gider. Eğer X eksenine 0 Offset değerini verirseniz bu X ekseninin
düğmenin en üstüne denk geleceği anlamına gelir. Aynı şekilde eğer 1 değerini verirseniz
ekseni düğmenin en alt noktasına itmiş olursunuz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="CenterOfRotation ayarları." height="166" src="http://daron.yondem.com/tr/content/binary/07062009_3.gif" width="500"&gt;
&lt;br&gt;
&lt;em&gt;CenterOfRotation ayarları.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Eksenin yerini değiştirmiş olmak artık düğmemizin kendi merkezine göre değilde üst
noktasına göre veya alt noktasına göre dönmesini sağlayacaktır. &lt;strong&gt;CenterOfRotation&lt;/strong&gt; olarak
geçen bu özelliğin &lt;strong&gt;X, Y ve Z&lt;/strong&gt; Offset değerlerini ayrı ayrı düzenleyebiliyorsunuz.
Yukarıdaki görselde de görebileceğiniz üzere aslında X ekseninin Y eksenine göre ne
kadar aşağıda veya yukarıda olacağını ayarlıyoruz. O nedenle düğmenizin X eksenin &lt;strong&gt;Offset&lt;/strong&gt; değeri
olarak ne kadar uzak olacağına dair bilgiyi &lt;strong&gt;CenterOfRotationY&lt;/strong&gt; değerine
atamanız gerekiyor. Aynı şekilde diğer eksenler için de &lt;strong&gt; CenterOfrotationX&lt;/strong&gt; ve &lt;strong&gt;CenterOfRotationZ&lt;/strong&gt; özellikleri
de mevcut.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;GlobalOffset ve LocalOffset ayarları.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Şu ana kadar eksenleri etrafında nesnelerin ne açı ile döneceklerini ve eksenlerin
nesnelerin neresine denk geleceğini ayarladık. Oysa başka dertlerimiz de olabilir.
Bunlardan en basiti tüm işlemleri yaparken nesneyi uygulama genelinde Global olarak
da posizyonlandırmak isteyebilirsiniz. İşte üç boyutlu ortamda nesnenize Global bir
pozisyon vermek istiyorsanız kullanacağınız özellikleri &lt;strong&gt;GlobalOffsetX&lt;/strong&gt;, &lt;strong&gt;GlobalOffsetY&lt;/strong&gt; ve &lt;strong&gt;GlobalOffsetZ&lt;/strong&gt; özellikleri
olacaktır. Bu özellikler kesinlikle animasyonunuzu veya nesnenin nasıl döneceğini
vs değiştirmez. Nesneyi kendi X, Y ve Z eksenleri ile beraber Global, uygulama bazında
ayrı bir X, Y ve Z ekseni üzerinden tekrar pozusyonlandırdığınızı düşünebilirsiniz.
&lt;/p&gt;
&lt;p&gt;
Gelelim animasyonlarınızı en hareketli ve janjanlı hale getirecek olan son özelliğe;
LocalOffset! Adından da anlaşılacağı üzere aslınad yine nesnenizi bir şeyden uzaklaştırıyorsunuz
fakat bu sefer global anlamda değil. Nesnenin kendi içinde belirlenen açılarla etrafında
döndüğü eksenlerden devasa miktarlarda uzaklaştırılarak sanki uzaklardan bir yerden
geliyormuş efekti ile ekrana gelmesini sağlayan mekanizma LocalOffset&amp;#39;tir. Düşünün
ki nesneniz ekseni etrafında değil de ekseninden 50 piksel uzakta bir dairede dönüyor?
Nasıl gözükürdü?
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Ekseninden uzaklarda dönen bir Button." height="291" src="http://daron.yondem.com/tr/content/binary/07062009_4.gif" width="340"&gt;
&lt;br&gt;
&lt;em&gt;Ekseninden uzaklarda dönen bir Button.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki görüntüden bir Button&amp;#39;un ekseninden uzakta dönmesi halinde nasıl bir
animasyon oluşabileceğini tahmin edebilirsiniz. Offset değerlerini arttırarak ve sadece
X değil farklı eksenlerde aynı anda açılar vererek animasyonlar hazırladığınızda nesnelerinizi
üç boyutlu ortamda istediğiniz gibi hareketlendirebiliyorsunuz. Tüm bu süreçte Button&amp;#39;un
sürekli olarak tıklanabilir kaldığını da hatırlatmak isterim.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Sonuç&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda bahsettiğimiz tüm özelliklere programatik erişimin haricinde animasyon içerisinde
de kullanabileceğiniz kesin. Özellikle unutulmaması gereken nokta Projection&amp;#39;ın
tüm nesnelere uygulanabiliyor olması, yani elinizde içi dolu bir &lt;strong&gt;StackPanel&lt;/strong&gt; veya
bir &lt;strong&gt;DataGrid&lt;/strong&gt; olabilir ve tüm bunları keni iç elementleri ile beraber
rahatlıkla anime edebilirsiniz. Hatta belki StackPanel&amp;#39;inizin içinde bir nesne
zaten kendi X, Y, Z koordinatlarına göre üç boyutlu bir animasyonu gerçekleştiriyordur
ve siz StackPanel&amp;#39;i de başka bir üç boyutlu animasyona alarak daha ilginç manzaralar
da yaratabilirsiniz.
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=9392035b-c1c2-4149-b4f7-066fce25dd6b" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=9392035b-c1c2-4149-b4f7-066fce25dd6b</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Silverlight ve WPF ile beraber gelen Resource yapıları özellikle web tasarımcıları
tarafından alışılmış CSS'in çok daha gelişmiş bir hali şeklinde tanımlanabilir.
Sadece görsel anlamda değil aynı anda kontrollerin veya nesnelerin işlevsellik anlamında
da birçok özelliklerinin birer stil olarak saklanmasını ve tekrar kullanılmalarının
yanı sıra uygulama çerçevesinde merkezi yönetim sağlamasını da düşünürsek Silverlight
projelerde Resource kullanımının büyük önemi var.
</p>
        <p>
Maalesef Silverlight 2.0 ile beraber elimizdeki tek seçenek Resource'larımızı
App.xaml içerisine yerleştirerek uygulama çapında kullanmaktı. Oysa çoğu zaman harici
CSS dosyaları gibi Silverlight tarafında da Resource'larımızı harici dosyalara
alarak farklı uygulamalarda da ortak olarak kullanmak istedik. Microsoft bizi dinlemiş
olsa gerek ki Silverlight 3.0 ile beraber <strong>MergedDictionaries</strong> yapısı
geliyor.
</p>
        <p style="color:maroon;">
          <strong>Nedir bu MergedDictionaries?</strong>
        </p>
        <p>
MergedDictionary'ler sayesinde harici bir dosyada yer alan ResourceDictionary'lerimizi
Silverlight uygulamalarımda yer alan kontrollerinin Resources koleksyonlarına ekleyebiliyoruz.
Böylece artık harici dosyalarda Resource'larımızı saklayabiliriz. Peki nasıl yapacağız?
Gelin basit bir örnek ile adım adım bu işlemleri nasıl yapabileceğimiz ve ne gibi
seçeneklerin bizi beklediğine bir göz atalım.
</p>
        <p>
          <strong>[XAML / HariciResource.xaml]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: red;">    xmlns</span>
          <span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: red;">    xmlns</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">x</span>
          <span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">SolidColorBrush</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Key</span>
          <span style="color: blue;">="<strong>OzelRenk</strong>"</span>
          <span style="color: red;"> Color</span>
          <span style="color: blue;">="#FF499422"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıda gördüğünüz kod harici bir XAML dosyası içerisinde tek başına bulunuyor. Aslında
bu dosya harici bir <strong>ResourceDictionary</strong> tanımlıyor ve içerisinde de
sadece bir adet <strong>SolidColorBrush</strong> var. Bunun gibi farklı Resource tiplerini
de bu dosya içerisinde saklayabiliriz. Biz şimdilik kodlarımız kısa ve anlaşılır olsun
diye bu basit örnek üzerinden ilerleyelim. <strong>OzelRenk</strong> adındaki bu Resource'u
uygulamanız içerisinde kullanabilmeniz için ilk olarak dosyayı Silverlight projenize
eklemeniz gerekiyor. Ekleme işlemi sonrası Solution Explorer içerisinden dosyayı seçtiğinizde
Properties panelinde <strong>Build Action</strong>'ın <strong> Content</strong> olmasına
dikkat edin. Böylece XAML dosyası XAP içerisindeki DLL'inize eklenecektir.
</p>
        <p>
Dosyamızı projemize ekledik fakat hala onu herhangi bir yerde tanımlamadık. Bu noktada
iki seçenek var, bunlardan biri söz konusu tanımlamayı App.XAML içerisinde yaparak
harici Resource dosyasındaki tüm Resource'ların uygulamada her yerde kullanılabilmesini
sağlamak, ikincisi ise sadece UserControl başına harici dosyayı Import etmek. Her
iki seçenekte de aynı kod kullanılacağı için gelin App.XAML içerisinde nasıl bir değişiklik
yapmamız gerektiğine göz atalım.
</p>
        <p>
          <strong>[XAML / App.xaml]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Application</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
        </p>
        <p style="margin: 0px;">
            <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
            <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication14.App"</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;"> &gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Application.Resources</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary.MergedDictionaries</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: red;"> Source</span>
          <span style="color: blue;">="HariciResource.xaml"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ResourceDictionary.MergedDictionaries</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Application.Resources</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Application</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Gördüğünüz gibi <strong>Application.Resources</strong> içerisinde bir <strong> MergedDictionaries</strong> serisi
yaratarak içerisine de harici <strong> ResourceDictionary'imizi</strong> koyuyoruz.
Böylece artık harici dosyamızdaki tüm Resource'lar rahatlıkla uygulama genelinde
kullanılabilecek.
</p>
        <p>
          <strong>[XAML / UserControl1.xaml]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication14.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Rectangle</span>
          <span style="color: red;"> Fill</span>
          <span style="color: blue;">="<strong>{</strong></span>
          <span style="color: #a31515;">
            <strong>StaticResource</strong>
          </span>
          <span style="color: red;">
            <strong> OzelRenk</strong>
          </span>
          <span style="color: blue;">}"</span>
          <span style="color: red;"> Stroke</span>
          <span style="color: blue;">="#FF000000"</span>
          <span style="color: red;"> Height</span>
          <span style="color: blue;">="64"</span>
          <span style="color: red;"> Margin</span>
          <span style="color: blue;">="74,75,159,0"</span>
          <span style="color: red;"> VerticalAlignment</span>
          <span style="color: blue;">="Top"/&gt;</span>
        </p>
        <p style="margin: 0px;">
 
</p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıda gördüğünüz basit <strong>UserControl</strong> içerisinde bir <strong> Rectangle</strong> bulunuyor.
Bu <strong>Rectangle</strong> aslında bizim biraz önce uygulamamıza eklediğimiz harici
Resource dosyası içerisindeki bir kaynağı kullanıyor. Sadece buradaki koda baktığımızda
aslında söz konusu Resource'ların <strong>App.xaml</strong> içerisinde olması
ile harici dosyada olması arasında bir fark yok.
</p>
        <p style="color:maroon;">
          <strong>Ya harici projelerdeki Resource dosyaları?</strong>
        </p>
        <p>
Şu ana kadarki örneğimizde <strong>Resource</strong> dosyası kendi projemiz içerisindeydi.
Oysa belki de Resource'larınızı harici <strong>Silverlight Class Library</strong>'ler
içerisinde tutuyor olabilirsiniz. İşte böyle bir durumda da doğrudan söz konusu DLL'i
referans alarak onun içerisindeki bir <strong>Resource Dictionary</strong>'yi
projenizde kullanmak isteyeceğiniz kesin. Bu gibi bir durumda değişen tek şey hedeflediğiniz
XAML dosyasının adresi yani Source.
</p>
        <p>
          <strong>[XAML / App.xaml]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Application</span>
          <span style="color: red;"> xmlns</span>
          <span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span>
        </p>
        <p style="margin: 0px;">
            <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
            <span style="color: red;"> x</span><span style="color: blue;">:</span><span style="color: red;">Class</span><span style="color: blue;">="SilverlightApplication16.App"</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;"> &gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Application.Resources</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary.MergedDictionaries</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">           
    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: red;"> Source</span>
          <span style="color: blue;">="SilverlightClassLibrary1;component/HariciResource.xaml"/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">            </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ResourceDictionary.MergedDictionaries</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">ResourceDictionary</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Application.Resources</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Application</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıdaki şekli ile örneğimizi incelediğinizde unutmayın ki projemize referans aldığımız
ve Assembly adı <strong>SilverlightClassLibrary1</strong> olan bir DLL bulunuyor.
Söz konusu DLL içerisinde yine bir önceki örnekte kullandığımız <strong>HariciResource.xaml</strong> dosyası
bulunuyor. <strong> App.xaml</strong> dosyamızdaki tek farklılık <strong>HariciResource.xaml</strong> dosyasına
ulaşırken kullandığımız yol tanımı. 
</p>
        <p>
Böylece Resource'larınızı harici DLL'lerde tutabilir ve istediğiniz projeye
referans alarak kullanabilirsiniz. Veya projelerinizde Static Resource isimleri kullanarak
yer geldiğinde sadece referansı değiştirerek tüm projenin görselliğinin değişmesini
sağlayabilirsiniz.
</p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=f49dcb80-dfc7-4991-a944-160da0e726a5" />
      </body>
      <title>Silverlight 3.0 ve harici Resource dosyalarının MergedResourceDictionary yapısı ile kullanımı</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/Nn2hJzfD3Ok/PermaLink.aspx</link>
      <pubDate>Sat, 06 Jun 2009 19:16:29 GMT</pubDate>
      <description>&lt;p&gt;
Silverlight ve WPF ile beraber gelen Resource yapıları özellikle web tasarımcıları
tarafından alışılmış CSS&amp;#39;in çok daha gelişmiş bir hali şeklinde tanımlanabilir.
Sadece görsel anlamda değil aynı anda kontrollerin veya nesnelerin işlevsellik anlamında
da birçok özelliklerinin birer stil olarak saklanmasını ve tekrar kullanılmalarının
yanı sıra uygulama çerçevesinde merkezi yönetim sağlamasını da düşünürsek Silverlight
projelerde Resource kullanımının büyük önemi var.
&lt;/p&gt;
&lt;p&gt;
Maalesef Silverlight 2.0 ile beraber elimizdeki tek seçenek Resource&amp;#39;larımızı
App.xaml içerisine yerleştirerek uygulama çapında kullanmaktı. Oysa çoğu zaman harici
CSS dosyaları gibi Silverlight tarafında da Resource&amp;#39;larımızı harici dosyalara
alarak farklı uygulamalarda da ortak olarak kullanmak istedik. Microsoft bizi dinlemiş
olsa gerek ki Silverlight 3.0 ile beraber &lt;strong&gt;MergedDictionaries&lt;/strong&gt; yapısı
geliyor.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Nedir bu MergedDictionaries?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
MergedDictionary&amp;#39;ler sayesinde harici bir dosyada yer alan ResourceDictionary&amp;#39;lerimizi
Silverlight uygulamalarımda yer alan kontrollerinin Resources koleksyonlarına ekleyebiliyoruz.
Böylece artık harici dosyalarda Resource&amp;#39;larımızı saklayabiliriz. Peki nasıl yapacağız?
Gelin basit bir örnek ile adım adım bu işlemleri nasıl yapabileceğimiz ve ne gibi
seçeneklerin bizi beklediğine bir göz atalım.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML / HariciResource.xaml]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;SolidColorBrush&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Key&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;strong&gt;OzelRenk&lt;/strong&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Color&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#FF499422&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda gördüğünüz kod harici bir XAML dosyası içerisinde tek başına bulunuyor. Aslında
bu dosya harici bir &lt;strong&gt;ResourceDictionary&lt;/strong&gt; tanımlıyor ve içerisinde de
sadece bir adet &lt;strong&gt;SolidColorBrush&lt;/strong&gt; var. Bunun gibi farklı Resource tiplerini
de bu dosya içerisinde saklayabiliriz. Biz şimdilik kodlarımız kısa ve anlaşılır olsun
diye bu basit örnek üzerinden ilerleyelim. &lt;strong&gt;OzelRenk&lt;/strong&gt; adındaki bu Resource&amp;#39;u
uygulamanız içerisinde kullanabilmeniz için ilk olarak dosyayı Silverlight projenize
eklemeniz gerekiyor. Ekleme işlemi sonrası Solution Explorer içerisinden dosyayı seçtiğinizde
Properties panelinde &lt;strong&gt;Build Action&lt;/strong&gt;&amp;#39;ın &lt;strong&gt; Content&lt;/strong&gt; olmasına
dikkat edin. Böylece XAML dosyası XAP içerisindeki DLL&amp;#39;inize eklenecektir.
&lt;/p&gt;
&lt;p&gt;
Dosyamızı projemize ekledik fakat hala onu herhangi bir yerde tanımlamadık. Bu noktada
iki seçenek var, bunlardan biri söz konusu tanımlamayı App.XAML içerisinde yaparak
harici Resource dosyasındaki tüm Resource&amp;#39;ların uygulamada her yerde kullanılabilmesini
sağlamak, ikincisi ise sadece UserControl başına harici dosyayı Import etmek. Her
iki seçenekte de aynı kod kullanılacağı için gelin App.XAML içerisinde nasıl bir değişiklik
yapmamız gerektiğine göz atalım.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML / App.xaml]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication14.App&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt; &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;HariciResource.xaml&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Gördüğünüz gibi &lt;strong&gt;Application.Resources&lt;/strong&gt; içerisinde bir &lt;strong&gt; MergedDictionaries&lt;/strong&gt; serisi
yaratarak içerisine de harici &lt;strong&gt; ResourceDictionary&amp;#39;imizi&lt;/strong&gt; koyuyoruz.
Böylece artık harici dosyamızdaki tüm Resource&amp;#39;lar rahatlıkla uygulama genelinde
kullanılabilecek.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML / UserControl1.xaml]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication14.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Rectangle&lt;/span&gt;&lt;span style="color: red;"&gt; Fill&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;strong&gt;{&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;StaticResource&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;strong&gt; OzelRenk&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;}&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Stroke&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;#FF000000&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;64&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Margin&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;74,75,159,0&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Top&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıda gördüğünüz basit &lt;strong&gt;UserControl&lt;/strong&gt; içerisinde bir &lt;strong&gt; Rectangle&lt;/strong&gt; bulunuyor.
Bu &lt;strong&gt;Rectangle&lt;/strong&gt; aslında bizim biraz önce uygulamamıza eklediğimiz harici
Resource dosyası içerisindeki bir kaynağı kullanıyor. Sadece buradaki koda baktığımızda
aslında söz konusu Resource&amp;#39;ların &lt;strong&gt;App.xaml&lt;/strong&gt; içerisinde olması
ile harici dosyada olması arasında bir fark yok.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Ya harici projelerdeki Resource dosyaları?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Şu ana kadarki örneğimizde &lt;strong&gt;Resource&lt;/strong&gt; dosyası kendi projemiz içerisindeydi.
Oysa belki de Resource&amp;#39;larınızı harici &lt;strong&gt;Silverlight Class Library&lt;/strong&gt;&amp;#39;ler
içerisinde tutuyor olabilirsiniz. İşte böyle bir durumda da doğrudan söz konusu DLL&amp;#39;i
referans alarak onun içerisindeki bir &lt;strong&gt;Resource Dictionary&lt;/strong&gt;&amp;#39;yi
projenizde kullanmak isteyeceğiniz kesin. Bu gibi bir durumda değişen tek şey hedeflediğiniz
XAML dosyasının adresi yani Source.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML / App.xaml]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication16.App&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt; &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightClassLibrary1;component/HariciResource.xaml&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary.MergedDictionaries&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application.Resources&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Application&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki şekli ile örneğimizi incelediğinizde unutmayın ki projemize referans aldığımız
ve Assembly adı &lt;strong&gt;SilverlightClassLibrary1&lt;/strong&gt; olan bir DLL bulunuyor.
Söz konusu DLL içerisinde yine bir önceki örnekte kullandığımız &lt;strong&gt;HariciResource.xaml&lt;/strong&gt; dosyası
bulunuyor. &lt;strong&gt; App.xaml&lt;/strong&gt; dosyamızdaki tek farklılık &lt;strong&gt;HariciResource.xaml&lt;/strong&gt; dosyasına
ulaşırken kullandığımız yol tanımı. 
&lt;/p&gt;
&lt;p&gt;
Böylece Resource&amp;#39;larınızı harici DLL&amp;#39;lerde tutabilir ve istediğiniz projeye
referans alarak kullanabilirsiniz. Veya projelerinizde Static Resource isimleri kullanarak
yer geldiğinde sadece referansı değiştirerek tüm projenin görselliğinin değişmesini
sağlayabilirsiniz.
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=f49dcb80-dfc7-4991-a944-160da0e726a5" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=f49dcb80-dfc7-4991-a944-160da0e726a5</feedburner:origLink></item>
    <item>
      <trackback:ping>http://daron.yondem.com/tr/Trackback.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</trackback:ping>
      <pingback:server>http://daron.yondem.com/tr/pingback.aspx</pingback:server>
      <pingback:target>http://daron.yondem.com/tr/PermaLink.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</pingback:target>
      <dc:creator>Daron Y�ndem Blog</dc:creator>
      <wfw:comment>http://daron.yondem.com/tr/CommentView.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</wfw:comment>
      <wfw:commentRss>http://daron.yondem.com/tr/SyndicationService.asmx/GetEntryCommentsRss?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bazı yazılımsal işlemleri özel donanım desteği her zaman performansı arttırır. Aslında
bunun çok basit bir nedeni var özünde. Yapacağımız yazılımsal işleve özel bir donanım
kullanıyor olmanın yanı sıra özellikle bugün bilgisayarlarımızda normal şartlarda
söz konusu işlemi yapmakla yükümlü birimi başka işlemler için serbest bırakıyor olmamız
da önemli bir nokta. Neden mi bahsediyorum? Örneğin bilgisayarlarımızdaki ekran kartları!
Hatırlayanlarınız vardır :) Eskiden oyunlardaki 3D hesaplamaları vs bilgisayarlarımızın
normal işlemcileri üstlenirdi. Sonrasında ekran kartlarında GPU denilen bir birim
ortaya çıktı ve 3D dahil birçok görsel hesaplamalayı işlemcilerimizin üzerinden aldı.
Böylece hem işlemcilerimiz rahatladı :) diğer işlemler ile çok daha rahat ilgilenir
oldular hem de söz konusu 3D işlemleri yapmaya özel tasarlanmış bir donanım artık
söz konusu işlemlerden sorumlu olduğu için çok daha yüksek performans alınabildi.
</p>
        <p style="color:maroon;">
          <strong>Silverlight ile alakası nedir?</strong>
        </p>
        <p>
Aslına bakarsak Silverlight içerisinde de bolca görsel işlem yapıyoruz. En basit örnek
olarak bir video oynatmayı bile ele alabiliriz. Biz videomuzu bir MediaElement ile
sahneye koyduğumuzda video dosyasının orijinal yükseklik ve genişliği ile hiç ilgilenmeyiz.
Oysa arkaplanda oynatılacak olan video uygun şekillerde MediaElement içerisine yerleştirilir
ve aslında gerçek zamanlı olarak videonun içindeki her kare resim tekrar boyutlandırılır.
Özellikle Full HD gibi yoğun data içeren yüksek çözünürlüklü videolarda aslında ciddi
bir işlem gücü gerekiyor ve şu ana kadar da bu işlemleri Silverlight tarafında bilgisayarımızın
işlemcisi üstleniyordu.
</p>
        <p>
Oysa zaten bugün hali hazırda neredeyse her bilgisayarda en kötüsünden bir GPU yok
mu? Neredeyse GPU'suz bilgisayar satın alamaz hale geldik. Tabi bu güzel bir gelişme
ama bu gelişmeden Silverlight'ın da faydalanması gerek! İşte Silverlight 3.0 ile
beraber "<strong>GPU Acceleration</strong>" denilen GPU (donanım) destekli
işlemler ile uygulamanın hızlandırılması artık mümkün. 
</p>
        <p style="color:maroon;">
          <strong>Video uygulamalarında Hardware Acceleration...</strong>
        </p>
        <p>
Hemen basit bir şekilde elimizdeki High Definition bir videoyu oynatan Silverlight
uygulaması hazırlayalım. Ekrana bir MediaElement koyarak Source özelliğini ayarlamamız
yeterli olacaktır.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication10.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">MediaElement</span>
          <span style="color: red;"> Source</span>
          <span style="color: blue;">="Wildlife.wmv"
/&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Yukarıdaki XAML kodu ile uygulamamızı çalıştırdığımda herhangi bir sorun yok. Video
rahatlıkla oynuyor fakat kendi makinemde yaptığım testte CPU kullanımı %25 civarında
geziyor. Acaba sadece bu videonun en azından tekrar boyutlandırma işini işlemciden
alıp GPU'ya aktarsak işlemci kullanımı ne kadar düşer?
</p>
        <p>
Silverlight içerisinde varsayılan ayarları ile GPU kullanımı gelmiyor. GPU kullanımını
bir uygulamada açmak için söz konusu uygulamanın HTML sayfa içerisine yerleştirildiği
OBJECT taglarına ekstra bir parametre geçmeniz gerekiyor.
</p>
        <p>
          <strong>[HTML]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">&lt;</span><span style="color: #a31515;">object</span><span style="color: red;">data</span><span style="color: blue;">="data:application/x-silverlight-2,"</span><span style="color: red;">type</span><span style="color: blue;">="application/x-silverlight-2"</span><span style="color: red;">width</span><span style="color: blue;">="100%"</span><span style="color: red;">height</span><span style="color: blue;">="100%"&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="source"</span><span style="color: red;">value</span><span style="color: blue;">="ClientBin/SilverlightApplication10.xap"/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="onerror"</span><span style="color: red;">value</span><span style="color: blue;">="onSilverlightError"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="background"</span><span style="color: red;">value</span><span style="color: blue;">="white"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="minRuntimeVersion"</span><span style="color: red;">value</span><span style="color: blue;">="3.0.40307.0"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="autoUpgrade"</span><span style="color: red;">value</span><span style="color: blue;">="true"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;"><strong>&lt;</strong></span><span style="color: #a31515;"><strong>param</strong></span><span style="color: red;"><strong>name</strong></span><span style="color: blue;"><strong>="EnableGPUAcceleration"</strong></span><span style="color: red;"><strong>value</strong></span><span style="color: blue;"><strong>="true"</strong></span><span style="color: blue;"><strong>/&gt;</strong></span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">a</span><span style="color: red;">href</span><span style="color: blue;">="http://go.microsoft.com/fwlink/?LinkID=141205"</span><span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">text-decoration</span>: <span style="color: blue;">none</span>;<span style="color: blue;">"&gt;</span></p>
        <p style="margin: 0px;">
                 <span style="color: blue;">&lt;</span><span style="color: #a31515;">img</span><span style="color: red;">src</span><span style="color: blue;">="http://go.microsoft.com/fwlink/?LinkId=108181"</span><span style="color: red;">alt</span><span style="color: blue;">="Get
Microsoft Silverlight"</span><span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">border-style</span>: <span style="color: blue;">none"/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;/</span><span style="color: #a31515;">a</span><span style="color: blue;">&gt;</span></p>
        <p style="margin-top: 0px;">
        <span style="color: blue;">&lt;/</span><span style="color: #a31515;">object</span><span style="color: blue;">&gt;</span></p>
        <p>
Yukarıdaki HTML kodları arasında da görebileceğiniz üzere artık Silverlight uygulamamızı
gösterecek olan OBJECT taglarına ek olarak bir de <strong>EnableGPUAcceleration</strong> parametresi
veriyor ve söz konusu değeri de <strong>True</strong> olarak set ediyoruz. Böylece
artık Silverlight uygulamamız GPU desteğine kavuşacak fakat ek olarak uygulama içerisinde
hangi kontrollerin GPU tarafından oluşturulması gerektiğini de belirtmemiz gerekiyor.
Bunun için kontrol bazında <strong> CacheMode</strong> ayarlanıyor. Şu anda sadece <strong>CacheMode</strong> olarak <strong>BitmapCache</strong> destekliyor.
BitmapCache'in tam olarak ne yaptığına bir sonraki örneğimizde göz atacağız. Şimdilik
MediaElement'imize nasıl BitmapCach uygulanır onu görelim.
</p>
        <p>
          <strong>[XAML]</strong>
        </p>
        <p style="margin: 0px;">
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Class</span>
          <span style="color: blue;">="SilverlightApplication10.MainPage"</span>
        </p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> xmlns</span><span style="color: blue;">:</span><span style="color: red;">x</span><span style="color: blue;">="http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
        <p style="margin: 0px;">
   <span style="color: red;"> Width</span><span style="color: blue;">="400"</span><span style="color: red;"> Height</span><span style="color: blue;">="300"&gt;</span></p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: red;"> x</span>
          <span style="color: blue;">:</span>
          <span style="color: red;">Name</span>
          <span style="color: blue;">="LayoutRoot"</span>
          <span style="color: red;"> Background</span>
          <span style="color: blue;">="White"&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;</span>
          <span style="color: #a31515;">MediaElement</span>
          <span style="color: red;"> Source</span>
          <span style="color: blue;">="Bear.wmv"
&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">
            <strong>            </strong>
          </span>
          <span style="color: blue;">
            <strong>&lt;</strong>
          </span>
          <span style="color: #a31515;">
            <strong>MediaElement.CacheMode</strong>
          </span>
          <span style="color: blue;">
            <strong>&gt;</strong>
          </span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">
            <strong>           
    </strong>
          </span>
          <span style="color: blue;">
            <strong>&lt;</strong>
          </span>
          <span style="color: #a31515;">
            <strong>BitmapCache</strong>
          </span>
          <span style="color: blue;">
            <strong>/&gt;</strong>
          </span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">
            <strong>            </strong>
          </span>
          <span style="color: blue;">
            <strong>&lt;/</strong>
          </span>
          <span style="color: #a31515;">
            <strong>MediaElement.CacheMode</strong>
          </span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">        </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">MediaElement</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin: 0px;">
          <span style="color: #a31515;">    </span>
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">Grid</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p style="margin-top: 0px;">
          <span style="color: blue;">&lt;/</span>
          <span style="color: #a31515;">UserControl</span>
          <span style="color: blue;">&gt;</span>
        </p>
        <p>
Silverlight içerisinde tüm nesnelerin artık bir CacheMode özelliği var. Bu özelliğe
bir BitmapCache vererek donanım desteğini arkanıza alabilirsiniz. Yukarıdaki örneği
donanım desteği ile çalıştırdığımda benim makinemde CPU kullanımı %25'ten %20'lere
indi. Tabi bu yaptığınız işleme ve GPU'nuzun gücüne göre değişecektir.
</p>
        <p align="center">
          <img border="1" alt="Silverlight'ta CPU kullanımı farkları." height="228" src="http://daron.yondem.com/tr/content/binary/05062009_1.gif" width="195" />
          <br />
          <em>Silverlight'ta CPU kullanımı farkları.</em>
        </p>
        <p>
Unutmadan birkaç detaya göz atalım. Silverlight'ın donanım desteğini arkasına
alabilmesi için hedef makinede DirectX9.0c yüklü olması gerekiyor. Eğer söz konusu
yükleme makinede yok ise yine eski tarz yazılım bazlı sisteme geri dönülüyor. Mac
ortamı için ekstra bir şart daha var; maalesef Mac ortamında donanım desteği sadece
tam ekran modunda çalışabiliyor.
</p>
        <p>
Şu an için GPU'ya aktarılan işlemler Transform, Rectangular Clipping ve Blending
işlemleri. İleriki sürümlerde farklı işlemlerin de GPU tarafına aktarılabilmesine
dair eklentiler vaatler arasında. 
</p>
        <p style="color:maroon;">
          <strong>BitmapCache nedir?</strong>
        </p>
        <p>
Aslında BitmapCache çok dikkatli yaklaşılması gereken bir teknik. Örneğin her noktada
BitmapCache kullanmaya başlarsak aslında performans kazanalım derken kaybetmemize
de neden olabilir. 
</p>
        <p>
Bildiğiniz üzere Silverlight içerisinde sürekli olarak ekran vektörel olarak çiziliyor.
Bazı durumlarda özellikle hızlı animasyonlarda anime ettiğiniz nesnenin görsel olarak
sürekli yeniden çizilmesini istemeyebilirsiniz. Oysa o görsel vektörel bir tekrar
çizme sürecinden geçirmek yerine daha önce çizilmiş vektörel sonucu bitmap olarak
kullanmak performans noktasında ciddi katkı sağlayabilir. 
</p>
        <p align="center">
          <img border="1" alt="BitmapCache'in performansa faydası." height="93" src="http://daron.yondem.com/tr/content/binary/05062009_2.gif" width="194" />
          <br />
          <em>BitmapCache'in performansa faydası.</em>
        </p>
        <p>
Yukarıdaki grafik testini yaparken çok sayıda notka içeren bir vektörel çizim kullandım.
Söz konusu vektörel çizim XAML kodunu makaleye yapıştırmıyorum çünkü hem anlamsız
hem de gereğinden uzun :) Vektörel çizimi bir animasyon ile ekranda sürekli olarak
büyütüp küçülttüm. Bu süreçte Normal şartlarda Silverlight her karede vektörel çizim
vektör verisinden tekrar çizdi. BitmapCache ile GPU desteğini açtığımda ise ilk başta
çizilen vektörel datadan bir Bitmap kopya alıp artık Bitmap koyayı büyütüp küçültmeye
başladı. Aradaki %10'a yakın performans farkını yukarıdaki görebilirsiniz.
</p>
        <p align="center">
          <img border="1" alt="BitmapCache Mantığı." height="400" src="http://daron.yondem.com/tr/content/binary/05062009_3.gif" width="409" />
          <br />
          <em>BitmapCache Mantığı.</em>
        </p>
        <p>
Tabi unutmamak gerek ki vektörel yerine bitmap işlemler yaptırdığınızda sistemin ilk
aldığı bitmap içerisinde kalite geçerli olacaktır ve nesne büyüdükçe tekrar çizilmediği
için normal animasyonlardaki kalite elde edilemeyecektir. Fakat bazı durumlarda bu
kalite farkının kullanıcı tarafından algılanması pek mümkün olmayabiliyor. İşte böyle
durumlarda BitmapCache hayat kurtarabilir.
</p>
        <p style="color:maroon;">
          <strong>Neresi Cache'den geliyor? Neresi gelmiyor?</strong>
        </p>
        <p>
BitmapCache ayarlarını yaptıktan sonra uygulamanızı test ederken gerçekten ekranda
nerelerin Cache'lenip Cache'lenmediğini görmek isterseniz yine HTML OBJECT
tagına geri dönüp aşağıdaki parametreyi ekleyebilirsiniz. Böylece artık Silverlight
uygulamanız çalışırken Cache'lenmeye yerleri ayrı renklerde gösterecektir.
</p>
        <p>
          <strong>[HTML]</strong>
        </p>
        <p style="margin: 0px;">
        <span style="color: blue;">&lt;</span><span style="color: #a31515;">object</span><span style="color: red;">data</span><span style="color: blue;">="data:application/x-silverlight-2,"</span><span style="color: red;">type</span><span style="color: blue;">="application/x-silverlight-2"</span><span style="color: red;">width</span><span style="color: blue;">="100%"</span><span style="color: red;">height</span><span style="color: blue;">="100%"&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="source"</span><span style="color: red;">value</span><span style="color: blue;">="ClientBin/SilverlightApplication12.xap"/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="onerror"</span><span style="color: red;">value</span><span style="color: blue;">="onSilverlightError"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="background"</span><span style="color: red;">value</span><span style="color: blue;">="white"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="minRuntimeVersion"</span><span style="color: red;">value</span><span style="color: blue;">="3.0.40307.0"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="autoUpgrade"</span><span style="color: red;">value</span><span style="color: blue;">="true"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">param</span><span style="color: red;">name</span><span style="color: blue;">="EnableGPUAcceleration"</span><span style="color: red;">value</span><span style="color: blue;">="true"</span><span style="color: blue;">/&gt;</span></p>
        <p style="margin: 0px;">
          <strong>            </strong>
          <span style="color: blue;">
            <strong>&lt;</strong>
          </span>
          <span style="color: #a31515;">
            <strong>param</strong>
          </span>
          <span style="color: red;">
            <strong>name</strong>
          </span>
          <span style="color: blue;">
            <strong>="EnableCacheVisualization"</strong>
          </span>
          <span style="color: red;">
            <strong>value</strong>
          </span>
          <span style="color: blue;">
            <strong>="true"</strong>
          </span>
          <span style="color: blue;">
            <strong>/&gt;</strong>
          </span>
        </p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;</span><span style="color: #a31515;">a</span><span style="color: red;">href</span><span style="color: blue;">="http://go.microsoft.com/fwlink/?LinkID=141205"</span><span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">text-decoration</span>: <span style="color: blue;">none</span>;<span style="color: blue;">"&gt;</span></p>
        <p style="margin: 0px;">
                 <span style="color: blue;">&lt;</span><span style="color: #a31515;">img</span><span style="color: red;">src</span><span style="color: blue;">="http://go.microsoft.com/fwlink/?LinkId=108181"</span><span style="color: red;">alt</span><span style="color: blue;">="Get
Microsoft Silverlight"</span><span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">border-style</span>: <span style="color: blue;">none"/&gt;</span></p>
        <p style="margin: 0px;">
            <span style="color: blue;">&lt;/</span><span style="color: #a31515;">a</span><span style="color: blue;">&gt;</span></p>
        <p style="margin-top: 0px;">
        <span style="color: blue;">&lt;/</span><span style="color: #a31515;">object</span><span style="color: blue;">&gt;</span></p>
        <p>
Hepinize kolay gelsin.
</p>
        <img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=27ca0d6d-2a2d-4c9b-8706-da5c32267213" />
      </body>
      <title>Silverlight 3.0 içerisinde GPU ve BitmapCache kullanımı.</title>
      <guid isPermaLink="false">http://daron.yondem.com/tr/PermaLink.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</guid>
      <link>http://feedproxy.google.com/~r/daronyondem/~3/Y10IPM1wvtk/PermaLink.aspx</link>
      <pubDate>Fri, 05 Jun 2009 17:08:08 GMT</pubDate>
      <description>&lt;p&gt;
Bazı yazılımsal işlemleri özel donanım desteği her zaman performansı arttırır. Aslında
bunun çok basit bir nedeni var özünde. Yapacağımız yazılımsal işleve özel bir donanım
kullanıyor olmanın yanı sıra özellikle bugün bilgisayarlarımızda normal şartlarda
söz konusu işlemi yapmakla yükümlü birimi başka işlemler için serbest bırakıyor olmamız
da önemli bir nokta. Neden mi bahsediyorum? Örneğin bilgisayarlarımızdaki ekran kartları!
Hatırlayanlarınız vardır :) Eskiden oyunlardaki 3D hesaplamaları vs bilgisayarlarımızın
normal işlemcileri üstlenirdi. Sonrasında ekran kartlarında GPU denilen bir birim
ortaya çıktı ve 3D dahil birçok görsel hesaplamalayı işlemcilerimizin üzerinden aldı.
Böylece hem işlemcilerimiz rahatladı :) diğer işlemler ile çok daha rahat ilgilenir
oldular hem de söz konusu 3D işlemleri yapmaya özel tasarlanmış bir donanım artık
söz konusu işlemlerden sorumlu olduğu için çok daha yüksek performans alınabildi.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Silverlight ile alakası nedir?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Aslına bakarsak Silverlight içerisinde de bolca görsel işlem yapıyoruz. En basit örnek
olarak bir video oynatmayı bile ele alabiliriz. Biz videomuzu bir MediaElement ile
sahneye koyduğumuzda video dosyasının orijinal yükseklik ve genişliği ile hiç ilgilenmeyiz.
Oysa arkaplanda oynatılacak olan video uygun şekillerde MediaElement içerisine yerleştirilir
ve aslında gerçek zamanlı olarak videonun içindeki her kare resim tekrar boyutlandırılır.
Özellikle Full HD gibi yoğun data içeren yüksek çözünürlüklü videolarda aslında ciddi
bir işlem gücü gerekiyor ve şu ana kadar da bu işlemleri Silverlight tarafında bilgisayarımızın
işlemcisi üstleniyordu.
&lt;/p&gt;
&lt;p&gt;
Oysa zaten bugün hali hazırda neredeyse her bilgisayarda en kötüsünden bir GPU yok
mu? Neredeyse GPU&amp;#39;suz bilgisayar satın alamaz hale geldik. Tabi bu güzel bir gelişme
ama bu gelişmeden Silverlight&amp;#39;ın da faydalanması gerek! İşte Silverlight 3.0 ile
beraber &amp;quot;&lt;strong&gt;GPU Acceleration&lt;/strong&gt;&amp;quot; denilen GPU (donanım) destekli
işlemler ile uygulamanın hızlandırılması artık mümkün. 
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Video uygulamalarında Hardware Acceleration...&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Hemen basit bir şekilde elimizdeki High Definition bir videoyu oynatan Silverlight
uygulaması hazırlayalım. Ekrana bir MediaElement koyarak Source özelliğini ayarlamamız
yeterli olacaktır.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication10.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Wildlife.wmv&amp;quot;
/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki XAML kodu ile uygulamamızı çalıştırdığımda herhangi bir sorun yok. Video
rahatlıkla oynuyor fakat kendi makinemde yaptığım testte CPU kullanımı %25 civarında
geziyor. Acaba sadece bu videonun en azından tekrar boyutlandırma işini işlemciden
alıp GPU&amp;#39;ya aktarsak işlemci kullanımı ne kadar düşer?
&lt;/p&gt;
&lt;p&gt;
Silverlight içerisinde varsayılan ayarları ile GPU kullanımı gelmiyor. GPU kullanımını
bir uygulamada açmak için söz konusu uygulamanın HTML sayfa içerisine yerleştirildiği
OBJECT taglarına ekstra bir parametre geçmeniz gerekiyor.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[HTML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object&lt;/span&gt; &lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;data:application/x-silverlight-2,&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;application/x-silverlight-2&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;100%&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;source&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;ClientBin/SilverlightApplication10.xap&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;onerror&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;onSilverlightError&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;background&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;white&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;minRuntimeVersion&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;3.0.40307.0&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;autoUpgrade&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt; &lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;param&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;EnableGPUAcceleration&amp;quot;&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;value&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;true&amp;quot;&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt; &lt;strong&gt;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt; &lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://go.microsoft.com/fwlink/?LinkID=141205&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt;text-decoration&lt;/span&gt;: &lt;span style="color: blue;"&gt;none&lt;/span&gt;;&lt;span style="color: blue;"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;img&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;alt&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Get
Microsoft Silverlight&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt;border-style&lt;/span&gt;: &lt;span style="color: blue;"&gt;none&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki HTML kodları arasında da görebileceğiniz üzere artık Silverlight uygulamamızı
gösterecek olan OBJECT taglarına ek olarak bir de &lt;strong&gt;EnableGPUAcceleration&lt;/strong&gt; parametresi
veriyor ve söz konusu değeri de &lt;strong&gt;True&lt;/strong&gt; olarak set ediyoruz. Böylece
artık Silverlight uygulamamız GPU desteğine kavuşacak fakat ek olarak uygulama içerisinde
hangi kontrollerin GPU tarafından oluşturulması gerektiğini de belirtmemiz gerekiyor.
Bunun için kontrol bazında &lt;strong&gt; CacheMode&lt;/strong&gt; ayarlanıyor. Şu anda sadece &lt;strong&gt;CacheMode&lt;/strong&gt; olarak &lt;strong&gt;BitmapCache&lt;/strong&gt; destekliyor.
BitmapCache&amp;#39;in tam olarak ne yaptığına bir sonraki örneğimizde göz atacağız. Şimdilik
MediaElement&amp;#39;imize nasıl BitmapCach uygulanır onu görelim.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[XAML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Class&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;SilverlightApplication10.MainPage&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;x&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt; Width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;300&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: red;"&gt; x&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: red;"&gt;Name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt; Background&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;White&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;&lt;span style="color: red;"&gt; Source&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Bear.wmv&amp;quot;
&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;MediaElement.CacheMode&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;BitmapCache&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;lt;/&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;MediaElement.CacheMode&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;MediaElement&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: #a31515;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Silverlight içerisinde tüm nesnelerin artık bir CacheMode özelliği var. Bu özelliğe
bir BitmapCache vererek donanım desteğini arkanıza alabilirsiniz. Yukarıdaki örneği
donanım desteği ile çalıştırdığımda benim makinemde CPU kullanımı %25&amp;#39;ten %20&amp;#39;lere
indi. Tabi bu yaptığınız işleme ve GPU&amp;#39;nuzun gücüne göre değişecektir.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="Silverlight'ta CPU kullanımı farkları." height="228" src="http://daron.yondem.com/tr/content/binary/05062009_1.gif" width="195"&gt;
&lt;br&gt;
&lt;em&gt;Silverlight'ta CPU kullanımı farkları.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Unutmadan birkaç detaya göz atalım. Silverlight&amp;#39;ın donanım desteğini arkasına
alabilmesi için hedef makinede DirectX9.0c yüklü olması gerekiyor. Eğer söz konusu
yükleme makinede yok ise yine eski tarz yazılım bazlı sisteme geri dönülüyor. Mac
ortamı için ekstra bir şart daha var; maalesef Mac ortamında donanım desteği sadece
tam ekran modunda çalışabiliyor.
&lt;/p&gt;
&lt;p&gt;
Şu an için GPU&amp;#39;ya aktarılan işlemler Transform, Rectangular Clipping ve Blending
işlemleri. İleriki sürümlerde farklı işlemlerin de GPU tarafına aktarılabilmesine
dair eklentiler vaatler arasında. 
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;BitmapCache nedir?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Aslında BitmapCache çok dikkatli yaklaşılması gereken bir teknik. Örneğin her noktada
BitmapCache kullanmaya başlarsak aslında performans kazanalım derken kaybetmemize
de neden olabilir. 
&lt;/p&gt;
&lt;p&gt;
Bildiğiniz üzere Silverlight içerisinde sürekli olarak ekran vektörel olarak çiziliyor.
Bazı durumlarda özellikle hızlı animasyonlarda anime ettiğiniz nesnenin görsel olarak
sürekli yeniden çizilmesini istemeyebilirsiniz. Oysa o görsel vektörel bir tekrar
çizme sürecinden geçirmek yerine daha önce çizilmiş vektörel sonucu bitmap olarak
kullanmak performans noktasında ciddi katkı sağlayabilir. 
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="BitmapCache'in performansa faydası." height="93" src="http://daron.yondem.com/tr/content/binary/05062009_2.gif" width="194"&gt;
&lt;br&gt;
&lt;em&gt;BitmapCache'in performansa faydası.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Yukarıdaki grafik testini yaparken çok sayıda notka içeren bir vektörel çizim kullandım.
Söz konusu vektörel çizim XAML kodunu makaleye yapıştırmıyorum çünkü hem anlamsız
hem de gereğinden uzun :) Vektörel çizimi bir animasyon ile ekranda sürekli olarak
büyütüp küçülttüm. Bu süreçte Normal şartlarda Silverlight her karede vektörel çizim
vektör verisinden tekrar çizdi. BitmapCache ile GPU desteğini açtığımda ise ilk başta
çizilen vektörel datadan bir Bitmap kopya alıp artık Bitmap koyayı büyütüp küçültmeye
başladı. Aradaki %10&amp;#39;a yakın performans farkını yukarıdaki görebilirsiniz.
&lt;/p&gt;
&lt;p align="center"&gt;
&lt;img border="1" alt="BitmapCache Mantığı." height="400" src="http://daron.yondem.com/tr/content/binary/05062009_3.gif" width="409"&gt;
&lt;br&gt;
&lt;em&gt;BitmapCache Mantığı.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Tabi unutmamak gerek ki vektörel yerine bitmap işlemler yaptırdığınızda sistemin ilk
aldığı bitmap içerisinde kalite geçerli olacaktır ve nesne büyüdükçe tekrar çizilmediği
için normal animasyonlardaki kalite elde edilemeyecektir. Fakat bazı durumlarda bu
kalite farkının kullanıcı tarafından algılanması pek mümkün olmayabiliyor. İşte böyle
durumlarda BitmapCache hayat kurtarabilir.
&lt;/p&gt;
&lt;p style="color:maroon;"&gt;
&lt;strong&gt;Neresi Cache&amp;#39;den geliyor? Neresi gelmiyor?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
BitmapCache ayarlarını yaptıktan sonra uygulamanızı test ederken gerçekten ekranda
nerelerin Cache&amp;#39;lenip Cache&amp;#39;lenmediğini görmek isterseniz yine HTML OBJECT
tagına geri dönüp aşağıdaki parametreyi ekleyebilirsiniz. Böylece artık Silverlight
uygulamanız çalışırken Cache&amp;#39;lenmeye yerleri ayrı renklerde gösterecektir.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[HTML]&lt;/strong&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object&lt;/span&gt; &lt;span style="color: red;"&gt;data&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;data:application/x-silverlight-2,&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;application/x-silverlight-2&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;height&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;100%&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;source&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;ClientBin/SilverlightApplication12.xap&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;onerror&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;onSilverlightError&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;background&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;white&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;minRuntimeVersion&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;3.0.40307.0&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;autoUpgrade&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;param&lt;/span&gt; &lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;EnableGPUAcceleration&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color: blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt; &lt;span style="color: blue;"&gt;&lt;strong&gt;&amp;lt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;&lt;strong&gt;param&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;name&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;EnableCacheVisualization&amp;quot;&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: red;"&gt; &lt;strong&gt;value&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;strong&gt;=&amp;quot;true&amp;quot;&lt;/strong&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt; &lt;strong&gt;/&amp;gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt; &lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://go.microsoft.com/fwlink/?LinkID=141205&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt;text-decoration&lt;/span&gt;: &lt;span style="color: blue;"&gt;none&lt;/span&gt;;&lt;span style="color: blue;"&gt;&amp;quot;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;img&lt;/span&gt; &lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;http://go.microsoft.com/fwlink/?LinkId=108181&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;alt&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;Get
Microsoft Silverlight&amp;quot;&lt;/span&gt; &lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color: red;"&gt;border-style&lt;/span&gt;: &lt;span style="color: blue;"&gt;none&amp;quot;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin-top: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;object&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Hepinize kolay gelsin.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://daron.yondem.com/tr/aggbug.ashx?id=27ca0d6d-2a2d-4c9b-8706-da5c32267213" /&gt;</description>
      <comments>http://daron.yondem.com/tr/CommentView.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</comments>
      <category>Silverlight 3.0</category>
    <feedburner:origLink>http://daron.yondem.com/tr/PermaLink.aspx?guid=27ca0d6d-2a2d-4c9b-8706-da5c32267213</feedburner:origLink></item>
  </channel>
</rss>
