<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Silverlight</title>
	
	<link>http://silverlightru.net</link>
	<description>Все о Microsoft Silverlight</description>
	<pubDate>Sat, 25 Apr 2009 19:10:50 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/silverlightru/ZgFo" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Статьи по Silverlight</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/oswF9PTKAZg/stati-po-silverlight</link>
		<comments>http://silverlightru.net/stati-po-silverlight#comments</comments>
		<pubDate>Sat, 25 Apr 2009 19:10:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=194</guid>
		<description><![CDATA[Нужен человек, который смоет писать пару статей в месяц, вознаграждение гарантируется. Асю и мыло для связи смотрим в контактах.


	Related posts
	
	No related posts.
	

]]></description>
			<content:encoded><![CDATA[<p>Нужен человек, который смоет писать пару статей в месяц, вознаграждение гарантируется. Асю и мыло для связи смотрим в контактах.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li>No related posts.</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/stati-po-silverlight/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/stati-po-silverlight</feedburner:origLink></item>
		<item>
		<title>Silverlight на iPhone</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/e5fdxT_ErAM/silverlight-na-iphone</link>
		<comments>http://silverlightru.net/silverlight-na-iphone#comments</comments>
		<pubDate>Mon, 13 Apr 2009 11:01:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=191</guid>
		<description><![CDATA[
Apple и Microsoft объявили о сотрудничестве. И благодаря этому мы уже может увидеть на iPhone SilverLight. Возможно скоро и Flash Player появится.


	Related posts
	
	Книги по технологии Microsoft Silverlight (0)
	Навигация между страницами (15)
	Пример использования Web Service и Data Binding в Silver Light (3)
	Контролы - контейнеры (4)
	Простой MediaPlayer (6)


]]></description>
			<content:encoded><![CDATA[<p><a href="http://silverlightru.net/wp-content/uploads/2009/04/iphonesilverlight.jpg"><img class="alignleft size-medium wp-image-192" title="iphonesilverlight" src="http://silverlightru.net/wp-content/uploads/2009/04/iphonesilverlight-191x300.jpg" alt="" width="191" height="300" /></a><br />
Apple и Microsoft объявили о сотрудничестве. И благодаря этому мы уже может увидеть на iPhone <strong>SilverLight</strong>. Возможно скоро и Flash Player появится.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/silverlight-book" title="Книги по технологии Microsoft Silverlight (Ноябрь 18, 2008)">Книги по технологии Microsoft Silverlight</a> (0)</li>
	<li><a href="http://silverlightru.net/navigaciya-mezhdu-stranicami" title="Навигация между страницами (Июль 24, 2008)">Навигация между страницами</a> (15)</li>
	<li><a href="http://silverlightru.net/primer-ispolzovaniya-web-service-i-data-binding-v-silver-light" title="Пример использования Web Service и Data Binding в Silver Light (Июль 10, 2008)">Пример использования Web Service и Data Binding в Silver Light</a> (3)</li>
	<li><a href="http://silverlightru.net/kontroly-kontejnery" title="Контролы - контейнеры (Май 29, 2008)">Контролы - контейнеры</a> (4)</li>
	<li><a href="http://silverlightru.net/prostoj-mediaplayer" title="Простой MediaPlayer (Май 22, 2008)">Простой MediaPlayer</a> (6)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/silverlight-na-iphone/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/silverlight-na-iphone</feedburner:origLink></item>
		<item>
		<title>Детский портал использовал технолоию Silverlight</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/xW7AuHyL5WU/detskij-portal-ispolzoval-texnoloiyu-silverlight</link>
		<comments>http://silverlightru.net/detskij-portal-ispolzoval-texnoloiyu-silverlight#comments</comments>
		<pubDate>Sat, 21 Mar 2009 09:17:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<category><![CDATA[microsoft]]></category>

		<category><![CDATA[Silverlight 2]]></category>

		<category><![CDATA[портал]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=188</guid>
		<description><![CDATA[
Вот теперь мы видим на деле, как технология Silverlight внедряется постепенно в нашу жизнь. И начинаем мы с малого поколения.
ВГТРК и Microsoft открыли детский портал «Бибигоша

Вот что было опубликовано на самом сайте Microsoft:
Сегодня Всероссийская государственная телевизионная и радиовещательная компания (ВГТРК) и компания Microsoft объявили о запуске детского портала «Бибигоша». Проект представляет уникальное сочетание современных технологических [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_189" class="wp-caption alignnone" style="width: 410px"><a href="http://silverlightru.net/wp-content/uploads/2009/03/bigimosha.jpg"><img class="size-full wp-image-189" title="bigimosha" src="http://silverlightru.net/wp-content/uploads/2009/03/bigimosha.jpg" alt="Детский портал и технология Silverlight" width="400" height="331" /></a><p class="wp-caption-text">Детский портал и технология Silverlight</p></div>
<p>Вот теперь мы видим на деле, как технология <strong>Silverlight</strong> внедряется постепенно в нашу жизнь. И начинаем мы с малого поколения.<br />
ВГТРК и Microsoft открыли детский портал «<strong>Бибигоша</strong><br />
<span id="more-188"></span><br />
Вот что было опубликовано на самом сайте <strong>Microsoft</strong>:<br />
Сегодня Всероссийская государственная телевизионная и радиовещательная компания (ВГТРК) и компания Microsoft объявили о запуске детского портала «<strong>Бибигоша</strong>». Проект представляет уникальное сочетание современных технологических разработок Microsoft и богатого медиа наполнения от ВГТРК. Портал создан в рамках стратегического партнерства компаний при активном участии российского разработчика <strong>TVX Games</strong>.</p>
<p>Новый портал «<strong>Бибигоша</strong>» представляет собой полностью защищенное интернет-пространство, где ребенок сможет получить новые знания и с удовольствием провести время благодаря ресурсам медиа-библиотеки ВГТРК. При реализации проекта «Бибигоша» активно применялась новая технология <strong>Microsoft Silverlight 2</strong>, которая позволила разработчикам в кратчайшие сроки создать мощный целостный портал и предоставить функционально богатую историю пользователям. Кроме того, благодаря <strong>Silverlight 2</strong> портал предъявляет минимальные требования к скорости интернет-соединения, что позволит детям из разных регионов страны воспользоваться его возможностями.</p>
<p><em>Первоисточник http://www.microsoft.com/rus/news/issues/2009/02/bibigosha.mspx</em></p>
<p>»</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/silverlight-book" title="Книги по технологии Microsoft Silverlight (Ноябрь 18, 2008)">Книги по технологии Microsoft Silverlight</a> (0)</li>
	<li><a href="http://silverlightru.net/microsoft-silverlight-2-reliz" title="Microsoft Silverlight 2 релиз (Октябрь 16, 2008)">Microsoft Silverlight 2 релиз</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/detskij-portal-ispolzoval-texnoloiyu-silverlight/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/detskij-portal-ispolzoval-texnoloiyu-silverlight</feedburner:origLink></item>
		<item>
		<title>DataBinding (часть 2 - метод вынесения контрола)</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/xVUcAQY-ueQ/databinding-chast-2-metod-vyneseniya-kontrola</link>
		<comments>http://silverlightru.net/databinding-chast-2-metod-vyneseniya-kontrola#comments</comments>
		<pubDate>Mon, 08 Dec 2008 20:50:23 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[DataBinding]]></category>

		<category><![CDATA[Event]]></category>

		<category><![CDATA[UserControl]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=179</guid>
		<description><![CDATA[В прошлом уроке, я показывал проблемы Data Binding и одно из  решений, этой проблемы. Сегодня мы будем решать эту же задачу. Но совершенно  другим способ. Зачем? Просто каждый способ имеет свои достоинства и недостатки.  Поэтому иногда будет быстрей и удобней работать с одним методом, а иногда с  другим. Тем более, когда [...]]]></description>
			<content:encoded><![CDATA[<p>В прошлом уроке, я показывал проблемы Data Binding и одно из  решений, этой проблемы. Сегодня мы будем решать эту же задачу. Но совершенно  другим способ. Зачем? Просто каждый способ имеет свои достоинства и недостатки.  Поэтому иногда будет быстрей и удобней работать с одним методом, а иногда с  другим. Тем более, когда у нас есть несколько решений - это говорит о гибкости  языка и технологии.</p>
<p><span id="more-179"></span></p>
<p><a href="http://silverlightru.net/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper">И так, для начала советую прочесть предыдущую статью. Для  тех, кто этого делать не хочет, все таки попрошу себя пересилить и прочитать ;)</a><br />
  А кто не помнит, что было в ней напоминаю. Решаем следующую  задачу. Мы получается коллекцию классов, которую мы выводим в виде элементов.  Затем надо сделать необходимые действия. В нашем примере мы выделяем один из  элементов.</p>
<p>И так посмотрим, представление в XAML:</p>
<pre>

&lt;Grid  x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
	  &lt;ItemsControl  x:Name=&quot;FilmList&quot;&gt;
		  &lt;ItemsControl.ItemTemplate&gt;
			  &lt;DataTemplate&gt;
				  &lt;StackPanel  Orientation=&quot;Horizontal&quot; Background=&quot;Magenta&quot;  Margin=&quot;0,5,0,5&quot;  MouseLeftButtonDown=&quot;StackPanel_MouseLeftButtonDown&quot; &gt;
					  &lt;Image  Source=&quot;{Binding Image}&quot; Width=&quot;30&quot; Height=&quot;30&quot;  Margin=&quot;5&quot; MouseLeftButtonDown=&quot;Image_MouseLeftButtonDown&quot;  /&gt;
					  &lt;TextBlock  Text=&quot;{Binding Title}&quot; Margin=&quot;5&quot; /&gt;
					  &lt;TextBlock  Text=&quot;{Binding Time}&quot; Margin=&quot;5&quot; /&gt;
					  &lt;TextBlock  Text=&quot;{Binding FileSize}&quot; Margin=&quot;5&quot; /&gt;
				  &lt;/StackPanel&gt;
			  &lt;/DataTemplate&gt;
		  &lt;/ItemsControl.ItemTemplate&gt;
	  &lt;/ItemsControl&gt;
  &lt;/Grid&gt;
</pre>
<p>Вынесем повторяющиеся элементы в отдельный контрол, назовем  его Item. И так создайте новый UserControl и вынесем в него следующий код:</p>
<pre>

&lt;UserControl  x:Class=&quot;DataBindingExamples.Item&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;600&quot;&gt;
	  &lt;StackPanel  x:Name=&quot;LayoutRoot&quot;&gt;
	  &lt;!— НАШ ЭЛЕМЕНТ --&gt;
		  &lt;StackPanel  x:Name=&quot;ItemLayout&quot; Orientation=&quot;Horizontal&quot;  Background=&quot;Magenta&quot; Margin=&quot;0,5,0,5&quot;  MouseLeftButtonDown=&quot;ItemLayout_MouseLeftButtonDown&quot;&gt;
			  &lt;Image  x:Name=&quot;FilmImage&quot; Width=&quot;30&quot; Height=&quot;30&quot;  Margin=&quot;5&quot; /&gt;
			  &lt;TextBlock  x:Name=&quot;TextTitle&quot; Margin=&quot;5&quot; /&gt;
			  &lt;TextBlock x:Name=&quot;TextTime&quot;  Margin=&quot;5&quot; /&gt;
			  &lt;TextBlock  x:Name=&quot;TextFileSize&quot; Margin=&quot;5&quot; /&gt;
		  &lt;/StackPanel&gt;
	  &lt;!— НАШ ЭЛЕМЕНТ --&gt;
	  &lt;/StackPanel&gt;
  &lt;/UserControl&gt;
</pre>
<p>Я убрал все бинд выражения, также изменилось событие  MouseLeftButtonDown. Теперь этот элемент мы будем размножать, но нам как-то  необходимо устанавливайте свойство наших внутренних элементов. Для этого воспользуемся  конструктором и будем в него передавать наши параметры. Еще  нам понадобиться событие, которое будет  происходить при клике на этот элемент, и его мы в последствии будем вытаскивать  наверх, чтобы знать, что данные элемент кликнут. Также мы создадим метод  устанавливающий цвет заднего фона для удобства. </p>
<p>C#:</p>
<pre>
<code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace DataBindingExamples
{
    public partial class Item : UserControl
    {
        //событие клика на элемент
        public event EventHandler ItemClick;
        //храним текущий ID записи
        public int CurrentId;

        //Конструтор нашего Item
        public Item( int id, string title, int time, string fileSize, string imageSource )
        {
            //Устанавливаем свойства внутренних контролов и инициализируем переменные
            InitializeComponent();
            ItemLayout.Tag = id;
            TextTitle.Text = title;
            TextTime.Text = time.ToString();
            TextFileSize.Text = fileSize;

            FilmImage.Source = new BitmapImage(new Uri(imageSource));
            CurrentId = id;
        }

        //Метод меняет фон элемента
        public void SetBackground(Color color)
        {
            ItemLayout.Background = new SolidColorBrush(color);
        }

        private void ItemLayout_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //вызваем наше событие клика на элемент
            if (ItemClick != null)
                ItemClick(this, new ItemEventArgs(Convert.ToInt32(((StackPanel)sender).Tag)));
        }
    }

    //Создадим свой класс, чтобы передавать в параметрах ID кликнутого элемента
    public class ItemEventArgs : EventArgs
    {
        public ItemEventArgs(int id)
        {
            ID = id;
        }

        public int ID { get; set; }
    }
}</code>
</pre>
<p>И так элемент, готов он умеет делать все, что нам надо и  теперь его можно использовать.</p>
<p>Создадим на нашей странице StackPanel в коллекцию, которого  мы добавим наши Item.</p>
<p><strong>XAML</strong>:</p>
<pre>

&lt;UserControl  x:Class=&quot;DataBindingExamples.Page&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;600&quot;  Height=&quot;800&quot;&gt;
	  &lt;Grid x:Name=&quot;LayoutRoot&quot;  Background=&quot;White&quot;&gt;
		  &lt;StackPanel  x:Name=&quot;FilmsItems&quot; /&gt;
	  &lt;/Grid&gt;
  &lt;/UserControl&gt;
</pre>
<p>Теперь нам необходимо, получить коллекцию классов от нашего  вебсервиса, потом пробежать по ней получить коллекцию Item. И ее в свою очередь  добавить в коллекцию FilmsItems.</p>
<p>C#:</p>
<pre>
<code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using DataBindingExamples.WebSrv;

namespace DataBindingExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();

            //получаем нашу коллекцию фильмов
            var connector = new MyWebServiceSoapClient();
            connector.GetFimlsCompleted += connector_GetFimlsCompleted;
            connector.GetFimlsAsync();
        }

        void connector_GetFimlsCompleted(object sender, GetFimlsCompletedEventArgs e)
        {
            if (e.Error != null)
                return;

            if (e.Result.Count &amp;gt; 0)
            {
                List list = new List(e.Result);

                //Создаем наши Item  и добавляем в коллекцию FilmsItems
                foreach (Film current in list)
                {
                    Item item = new Item(current.Id, current.Title, current.Time, current.FileSize, current.Image);

                    //Подписываем на событие
                    item.ItemClick += item_ItemClick;
                    FilmsItems.Children.Add(item);
                }
            }
        }
        
        void item_ItemClick(object sender, ItemEventArgs e)
        {
            //бежим по коллекции StackPanel (FilmsItems)
            foreach (UIElement current in FilmsItems.Children)
            {
                //Выделяем текцщий элемент
                if (Convert.ToInt32(((Item)current).CurrentId) == e.ID)
                {
                    ((Item)current).SetBackground(Colors.Red);
                }
                else
                {
                    ((Item)current).SetBackground(Colors.Magenta);
                }
            }
        }
    }
}</code>
</pre>
<p>И так проверяем, как видим наш элементы правильно  отрабатывают, на события клика, и мы можем получать доступ к любым свойствам  любых контролов нашего Item. Изменив, идентификатор доступа, либо добавив новый  метод.</p>
<p>Удобно или нет, решать вам.<br />
  Этот способ дает нам намного больше гибкости и свободы, и не  дает никаких ограничений.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/12/film0.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/12/film0-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-182" /></a></p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/12/film2.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/12/film2-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-183" /></a></p>
<p>  Но в тоже время значительно трудоемок, и требует написания  большего количества, двух отдельных контролов. Хотя если контрол используется  во многих местах, вам все равно лучше его вынести. </p>
<p>Я надеюсь, эта статья помогла вам, более глубже, окунуться в  DataBinding и пути решения проблем при работе с ним. Жду ваших вопросов.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper" title="Управление контролами в ItemsControl  (часть 1 - с помощью VisualTreeHelper) (Ноябрь 29, 2008)">Управление контролами в ItemsControl  (часть 1 - с помощью VisualTreeHelper)</a> (3)</li>
	<li><a href="http://silverlightru.net/custom-control" title="Custom Control (Сентябрь 13, 2008)">Custom Control</a> (6)</li>
	<li><a href="http://silverlightru.net/primer-ispolzovaniya-web-service-i-data-binding-v-silver-light" title="Пример использования Web Service и Data Binding в Silver Light (Июль 10, 2008)">Пример использования Web Service и Data Binding в Silver Light</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/databinding-chast-2-metod-vyneseniya-kontrola/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/databinding-chast-2-metod-vyneseniya-kontrola</feedburner:origLink></item>
		<item>
		<title>Управление контролами в ItemsControl  (часть 1 - с помощью VisualTreeHelper)</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/cxsXxU9WBpw/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper</link>
		<comments>http://silverlightru.net/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper#comments</comments>
		<pubDate>Sat, 29 Nov 2008 12:36:54 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[DataBinding]]></category>

		<category><![CDATA[ItemsControl]]></category>

		<category><![CDATA[VisualTreeHelper]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=167</guid>
		<description><![CDATA[Сегодня мы поговорим об ItemsControl, DataBinding,  VisualTreeHelper. Рано  или поздно вы начнете создавать более или   менее серьезные приложения, которые будут решать конкретные задачи. И  конечно же современным приложениям не обойтись без базы данных, а нам как  программистам не обойтись без средств доступа к данным и их вывода.

Естественно существуют контролы, которые [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы поговорим об ItemsControl, DataBinding,  VisualTreeHelper. Рано  или поздно вы начнете создавать более или   менее серьезные приложения, которые будут решать конкретные задачи. И  конечно же современным приложениям не обойтись без базы данных, а нам как  программистам не обойтись без средств доступа к данным и их вывода.</p>
<p><span id="more-167"></span></p>
<p>Естественно существуют контролы, которые позволяют нам  выводить повторяющиеся структуры, например GridView или ListBox. Первый все таки подходит для  табличных данных, текстовой информации, да и дизайн мы особо то изменить не  можем, я имею ввиду места вывода данных. ListBox более гибче, и он в принципе нам  подходит, единственный недостаток его стандартный темплейт.  Хотя мы и можем поменять темплейт и заставить  его работать, как это нам надо, задача у нас сейчас состоит немного в  другом.  </p>
<p>Мы будем использовать ItemsControl он удобен для вывода любых  данных с помощью DataBinding и позволяет нам менять шаблон, а в шаблоне по умолчанию  содержится только StackPanel. </p>
<p>И так приступим. <a href="http://silverlightru.net/primer-ispolzovaniya-web-service-i-data-binding-v-silver-light">Кто не читал статью про DataBinding</a>, советую для начала прочесть  ее, чтобы вам было более понятно, что мы будем делать.<br />
  1) Создаем веб – сервис<br />
  2) Создаем наш класс, в нашем случае Film<br />
  3) Создаем метод которые вернет список наших Film<br />
  4) Получаем данные на стороне Silverlight<br />
  5) Биндим их к нашему ItemControls</p>
<p>Создайте проект. Затем в веб проекте добавляем веб сервис и  у него создаем класс Film и метод отдающий список Film.<br />
  Подключаем Service Reference в проекте Silverlight. </p>
<p>Код нашего Веб сервиса:</p>
<pre>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace DataBindingExamples.Web
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    public class MyWebService : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public List GetFimls ()
        {
            List list = new List();

            for (var i = 0; i &lt; 10; i++)
            {
                Film film = new Film();
                film.Id = i;
                film.Title = String.Format("Film Title {0} ", i);
                film.FileSize = String.Format("{0}", 100*i);
                film.Time = i*200;
                film.Image = String.Format("http://localhost/silverlight/{0}.jpg", i);

                list.Add(film);
            }

            return list;
        }
    }

    public class Film
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public int Time { get; set; }
        public string FileSize { get; set; }
        public string Image { get; set; }
    }
}
</pre>
<p>Теперь нам нужен контрол, который будет отображать наши  фильмы. Создаем ItemsControl и внутри прописываем DataBinding для всех полей нашего класса.</p>
<p>Код XAML: </p>
<pre>
&lt;UserControl x:Class=&quot;DataBindingExamples.Page&quot;
xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
Width=&quot;600&quot; Height=&quot;800&quot;&gt;
&lt;Grid x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
	&lt;ItemsControl x:Name=&quot;FilmList&quot;&gt;
			&lt;ItemsControl.ItemTemplate&gt;
			&lt;DataTemplate&gt;
				&lt;StackPanel Orientation=&quot;Horizontal&quot; Background=&quot;Bisque&quot; Margin=&quot;0,5,0,5&quot;&gt;
					&lt;Image  Source=&quot;{Binding Image}&quot; Width=&quot;30&quot; Height=&quot;30&quot; Margin=&quot;5&quot; /&gt;
					&lt;TextBlock Text=&quot;{Binding  Title}&quot; Margin=&quot;5&quot; /&gt;
					&lt;TextBlock  Text=&quot;{Binding Time}&quot; Margin=&quot;5&quot; /&gt;
					&lt;TextBlock  Text=&quot;{Binding FileSize}&quot; Margin=&quot;5&quot; /&gt;
				&lt;/StackPanel&gt;
			&lt;/DataTemplate&gt;
		&lt;/ItemsControl.ItemTemplate&gt;
	&lt;/ItemsControl&gt;
&lt;/Grid&gt;
&lt;/UserControl&gt;
</pre>
<p>Все очень просто теперь в CodeBehind добавлеем  полученные данные от WebService в наш ItemsCotrol.</p>
<p>Код C# </p>
<pre>

using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using DataBindingExamples.WebSrv;

namespace DataBindingExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();

            var connector = new MyWebServiceSoapClient();
            connector.GetFimlsCompleted += connector_GetFimlsCompleted;
            connector.GetFimlsAsync();
        }

        void connector_GetFimlsCompleted(object sender, GetFimlsCompletedEventArgs e)
        {
            if (e.Error != null)
                return;

            if (e.Result.Count &gt; 0)
            {
                List list = new List(e.Result);
                FilmList.ItemsSource = list;
            }
        }
    }
}
</pre>
<p>Посмотрим  на результат. Все отлично. Выводиться как мы хотели. Но есть один очень большой  недостаток. Который мне очень долго не удавлось исправить. У нас нет никакого  события, которые позволяет, что то делать с элементами, которые генерируются,  на основе нашего List. </p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/film0.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/11/film0-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-171" /></a></p>
<p>Например, у  нас стоит задача выделять какой то элемент при клике на него. Мы это можем  сделать, повесив обработчик OnClick  на наш StackPanel. Вот так:</p>
<p>Код XAML:</p>
<pre>

&lt;StackPanel Orientation=&quot;Horizontal&quot; Background=&quot;Bisque&quot; Margin=&quot;0,5,0,5&quot; MouseLeftButtonDown=&quot;StackPanel_MouseLeftButtonDown&quot;  &gt;
  &lt;Image  Source=&quot;{Binding Image}&quot; Width=&quot;30&quot; Height=&quot;30&quot; Margin=&quot;5&quot; /&gt;
	  &lt;TextBlock  Text=&quot;{Binding Title}&quot; Margin=&quot;5&quot; /&gt;
	  &lt;TextBlock  Text=&quot;{Binding Time}&quot; Margin=&quot;5&quot; /&gt;
	  &lt;TextBlock  Text=&quot;{Binding FileSize}&quot; Margin=&quot;5&quot; /&gt;
  &lt;/StackPanel&gt;
</pre>
<p>Обрабатываем  событие:</p>
<p>Код C#:</p>
<pre>
private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
	//для примера мы меняем его фон
	((StackPanel)sender).Background = new SolidColorBrush(Colors.Red);
}
</pre>
<p>Но если мы кликнем на другой элемент, мы поменяем его фон, а  вот предыдущий у нас тоже останется выделенным, то есть мы не имеем к нему  доступ. То есть мы не может получить доступ к коллекции элементов ItemsControl.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/film01.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/11/film01-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-172" /></a></p>
<p>Конечно, это создает очень много неудобств и ограничение  функционала. Изучение справки и помощь моего друга, помогло нам найти решение.  VisualTreeHelper класс помогающий нам проходить по коллекции  элементов контрола с помощью его методов.</p>
<p>Для начала немного объясню, что у нас получается или точнее  во что у нас генерируется ItemsControl.  После того, как мы присвоили свойству ItemSource наш List мы получаем  пример такую вот структуру.</p>
<pre>
&lt;!--  Корневой  элемент представления контента ItemsControl --&gt;
  &lt;ItemsPresenter&gt;
	  &lt;!--  StackPanek по умолчанию, про которую я говорил содержит коллекцию элементов  ItemsControl --&gt;
	  &lt;StackPanel&gt;
		  &lt;ContentPresenter&gt;
		  &lt;!--  Наша текущая панель которую нам надо получить --&gt;
			  &lt;StackPanel&gt;
				  &lt;Image  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
			  &lt;/StackPanel&gt;
		  &lt;/ContentPresenter&gt;
		  &lt;ContentPresenter&gt;
			  &lt;StackPanel&gt;
				  &lt;Image  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
			  &lt;/StackPanel&gt;
		  &lt;/ContentPresenter&gt;
		  &lt;ContentPresenter&gt;
			  &lt;StackPanel&gt;
				  &lt;Image  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
				  &lt;TextBlock  /&gt;
			  &lt;/StackPanel&gt;
		  &lt;/ContentPresenter&gt;
	  &lt;/StackPanel&gt;
  &lt;/ItemsPresenter&gt;
 </pre>
<p>И так нам нужно достучаться до внутренних элементов и делаем  мы это вот так:</p>
<pre>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using DataBindingExamples.WebSrv;

namespace DataBindingExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();

            var connector = new MyWebServiceSoapClient();
            connector.GetFimlsCompleted += connector_GetFimlsCompleted;
            connector.GetFimlsAsync();
        }

        void connector_GetFimlsCompleted(object sender, GetFimlsCompletedEventArgs e)
        {
            if (e.Error != null)
                return;

            if (e.Result.Count &gt; 0)
            {
                List list = new List(e.Result);
                FilmList.ItemsSource = list;
            }
        }

        private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            //Достаем ItemsPresenter для Нашего ItemsControl
            ItemsPresenter itemsPresenter = (ItemsPresenter)VisualTreeHelper.GetChild(FilmList, 0);
            //Достаем StackPanel для Нашего ItemsControl
            StackPanel rootStackPanel = (StackPanel)VisualTreeHelper.GetChild(itemsPresenter, 0);

            //бежим по коллекции ContentPresenter которые у нас генерируются в ItemsControl
            foreach (ContentPresenter current in rootStackPanel.Children)
            {
                //Наконец то получаем нужную нам StackPanel проверяем является ли она текущей, и выделяем ее
                StackPanel currentStackPanel = (StackPanel)VisualTreeHelper.GetChild(current, 0);
                if (currentStackPanel == (StackPanel)sender)
                    currentStackPanel.Background = new SolidColorBrush(Colors.Red);
                else
                    currentStackPanel.Background = new SolidColorBrush(Colors.Magenta);
            }
        }
    }
}
</pre>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/film1.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/11/film1-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-173" /></a></p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/film2.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/11/film2-300x250.jpg" alt="" width="300" height="250" class="alignnone size-medium wp-image-174" /></a></p>
<p>Вот что у  нас получается, то есть мы можем теперь делать, что хотим с коллекцией элементов  генерируемых в ItemsControl. </p>
<p><strong>Достоинва</strong>:</p>
<p>Нет ни  каких ограничений с доступом к любым элементам.</p>
<p><strong>Недостатки</strong>:</p>
<p>Метод  получения элементов не совсем очевиден. Громоздкий способ их получения, тем  более, если внутренний элмент сложный. Придется переделывать весь доступ, если  мы измени порядок или набор элементов.</p>
<p>PS – статья может показаться не  совсем понятной некоторым посетителям из-за ее сложности. Постараюсь ответить  на все вопросы.</p>
<p>Чтобы у вас отображались картинки. Создайте в IIS виртуальный каталог с именем silverlight, если у вас не стоит IIS (а он у вас должен стоять!), то воспользуйтесь другим вариантом. Положите файлы в корень проекта silverlight. Назовите все файлы соотвественно: 1.jpg, 2.jpg .. и т.д.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/databinding-chast-2-metod-vyneseniya-kontrola" title="DataBinding (часть 2 - метод вынесения контрола) (Декабрь 8, 2008)">DataBinding (часть 2 - метод вынесения контрола)</a> (3)</li>
	<li><a href="http://silverlightru.net/primer-ispolzovaniya-web-service-i-data-binding-v-silver-light" title="Пример использования Web Service и Data Binding в Silver Light (Июль 10, 2008)">Пример использования Web Service и Data Binding в Silver Light</a> (3)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/upravlenie-kontrolami-v-itemscontrol-chast-1-s-pomoshhyu-visualtreehelper</feedburner:origLink></item>
		<item>
		<title>Создание Анимации в Blend Studio</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/HXgWxKc86SY/sozdanie-animacii-v-blend-studio</link>
		<comments>http://silverlightru.net/sozdanie-animacii-v-blend-studio#comments</comments>
		<pubDate>Sun, 16 Nov 2008 16:20:02 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[Animation]]></category>

		<category><![CDATA[Blend Studio]]></category>

		<category><![CDATA[StoryBoard]]></category>

		<category><![CDATA[анимация]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=129</guid>
		<description><![CDATA[Анимация в Blend  Studio
И так как вы уже поняли анимация очень интересная и очень  эффективная вещь. Для создания красивых интерфейсов, а также красивых эффектов  в вашем приложении. Но согласитесь, не всегда удобно писать такое количество  кода. Пытаясь создать необходимую анимацию. Конечно, иногда без этого не  обойтись особенно тогда когда мы [...]]]></description>
			<content:encoded><![CDATA[<p>Анимация в Blend  Studio</p>
<p>И так как вы уже поняли анимация очень интересная и очень  эффективная вещь. Для создания красивых интерфейсов, а также красивых эффектов  в вашем приложении. Но согласитесь, не всегда удобно писать такое количество  кода. Пытаясь создать необходимую анимацию. Конечно, иногда без этого не  обойтись особенно тогда когда мы создаем объекты, и анимацию динамически. Но  иногда мы можем быстро и эффективно создать любую анимацию с помощью удобных  средств, которые нам предоставляет Blend Studio.</p>
<p><span id="more-129"></span></p>
<p>И так приступим. Все в принципе достаточно просто.<br />
1) Создается объект<br />
2) Обозначается его начальное место положение или его  начальные свойства<br />
3) Указывается его конечно место положение или его  результирующие свойства<br />
4) Создается анимация</p>
<p>Открываем Blend Studio,  запускаем новый проект.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an1.jpg"><img class="alignnone size-medium wp-image-131" src="http://silverlightru.net/wp-content/uploads/2008/11/an1-300x194.jpg" alt="" width="300" height="194" /></a></p>
<p>Для наибольшей давайте создадим опять же какой-нибудь  прямоугольник. Задайте ему цвет фона и цвет границы.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an2.jpg"><img class="alignnone size-medium wp-image-132" src="http://silverlightru.net/wp-content/uploads/2008/11/an2.jpg" alt="" width="285" height="231" /></a></p>
<p>Переключаем рабочее состояние студии на Анимацию, для этого  идем Window -&gt; Active WorkSpace -&gt; Animation WorkSpace (Или нажмите F6). Я не считаю, что решение  в организации рабочего пространства, придуманное Microsoft самое  лучшее, но все же он позволяет спокойно управлять всеми анимациями в нашем  приложении.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an3.jpg"><img class="alignnone size-medium wp-image-133" src="http://silverlightru.net/wp-content/uploads/2008/11/an3-300x169.jpg" alt="" width="300" height="169" /></a></p>
<p>Создадим новый StoryBoard, который будет содержать наши анимации. Назовем его MyFirstAnimation. После того  как, мы создали StoryBoard у нас появился TimLine на котором мы указываем в какой  момент времени, что у нас будет происходить. Точнее говоря, мы будем  расставлять ключевые кадры нашей анимации.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an4.jpg"><img class="alignnone size-medium wp-image-134" src="http://silverlightru.net/wp-content/uploads/2008/11/an4-300x285.jpg" alt="" width="300" height="285" /></a></p>
<p>Чтобы добавить новый ключевой кадр нужно проделать следующие  действия:</p>
<ol>
<li>в  дереве объектов выбираем наш объект</li>
<li>Выбираем  на временной линейки момент времени, когда должен закончиться переход к новым  значениям</li>
<li>Затем  нажимаем на плюс под панелью анимации, рядом с таймером.</li>
<li>Чтобы  делать изменения над объектом в нужный момент времени, необходимо переместить  желтый ползунок на данный момент времени, где у нас установлен ключевой кадр, и  затем изменять свойства объекта</li>
</ol>
<p>Также ключевые кадры создадутся  автоматически, если вы установили ползунок времени в нужное положение и начали  изменять свойства объекта.</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an5.jpg"><img class="alignnone size-medium wp-image-135" src="http://silverlightru.net/wp-content/uploads/2008/11/an5-300x214.jpg" alt="" width="300" height="214" /></a></p>
<p>И так чтобы проверить нашу  анимацию возвращаем наш ползунок в начальное положение и нажимаем кнопочку «play». Как видите все  работает. После, некоторой практики вы убедитесь, что это действительно просто  и эффективно.</p>
<p>Давайте посмотрим, что же нам  сгенерировала Blend Studio.  Как видите все анимации добвались в наш StoryBoard. А сам StoryBoard добавлен в ресурсы нашего контрола. То есть мы его можем  использовать, где угодно на нашем контроле. Естественно мы можем переместить  нашу анимацию куда угодно, и самим определять ее доступность.</p>
<p>И конечно же определять в какой  именно момент нам запускать анимацию.</p>
<p>Blend Studio позволяет  нам быстро и эффективно создать любую анимацию! При этом не написав не одной  строки кода, она все сделает за нас ;).</p>
<p><a href="http://silverlightru.net/wp-content/uploads/2008/11/an6.jpg"><img class="alignnone size-medium wp-image-136" src="http://silverlightru.net/wp-content/uploads/2008/11/an6-300x229.jpg" alt="" width="300" height="229" /></a></p>
<p>Данный метод хорош, когда мы не  знаем, как создавать ту или иную анимацию, и этот способ можно использовать как  шпаргалку.<br />
Когда мы только учимся работать с  анимацией.<br />
Когда это действительно удобно  создавать уникальную анимацию в Blend Studio.  В остальных и большинстве случаев, вы это будете делать в Code behind.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/animaciya" title="Анимация (Ноябрь 16, 2008)">Анимация</a> (0)</li>
	<li><a href="http://silverlightru.net/rabota-s-video-chast-2" title="Работа с видео (Часть 2) (Апрель 29, 2008)">Работа с видео (Часть 2)</a> (4)</li>
	<li><a href="http://silverlightru.net/znakomstvo-s-animaciej-microsoft-silverlights" title="Знакомство с анимацией Microsoft SilverLights (Сентябрь 30, 2007)">Знакомство с анимацией Microsoft SilverLights</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/sozdanie-animacii-v-blend-studio/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/sozdanie-animacii-v-blend-studio</feedburner:origLink></item>
		<item>
		<title>Анимация</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/BkWlSw90Pvk/animaciya</link>
		<comments>http://silverlightru.net/animaciya#comments</comments>
		<pubDate>Sun, 16 Nov 2008 07:35:31 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[Animation]]></category>

		<category><![CDATA[StoryBoard]]></category>

		<category><![CDATA[анимация]]></category>

		<guid isPermaLink="false">http://silverlightru.net/?p=120</guid>
		<description><![CDATA[Анимация, наверно, это самое интересное, что присутствует в  подобных технологиях. Анимация позволяет нам создавать очень красивые и яркие  эффекты. Также делает наше приложение живым. Это существенно отличает его от  обычного веб приложения. Причем мы можем применять ее абсолютно везде, где мы  захотим. Таким образом, создавая отклик на любое действие пользователя. Ну [...]]]></description>
			<content:encoded><![CDATA[<p>Анимация, наверно, это самое интересное, что присутствует в  подобных технологиях. Анимация позволяет нам создавать очень красивые и яркие  эффекты. Также делает наше приложение живым. Это существенно отличает его от  обычного веб приложения. Причем мы можем применять ее абсолютно везде, где мы  захотим. Таким образом, создавая отклик на любое действие пользователя. Ну  естественно Silverlight позволяет нам это делать причем очень удобно и эффективно. </p>
<p><span id="more-120"></span></p>
<p>И так приступим. Конечно же, как всегда начну с азов. Чтобы  было понятней как что и почему. <br />
  Что у нас из себя представляет анимация? Это  последовательность быстро сменяющихся статичных картинок, которые в  совокупности дают нам эффект движения. Наш глаз сам собирает из в движение. Мы  просто строим эту последовательность. Естественно современные средства создания  анимации, давно уже прошли тот этап, когда нам надо формировать каждый кадр  (вспомните блокноты, в которых рисовали птичек и т.п. вещи). Теперь у нас есть  возможность это все обойти. Нам нужно задавать только начальное и конечное  положение объекта в пространстве, а Silverlight сделает остальное за нас.<br />
  Например, у нас есть прямоугольник, мы хотим, чтобы у нас он  сместился по горизонтали на 200 пикселей. Начальная точка нам известна, мы уже  находимся в ней. Задаем конечную точку, и прямоугольник смещается на 200  пикселей. Это теория, теперь практика. </p>
<p>Анимации бывают двух типов:</p>
<ol>
<li>Анимации  по значениям</li>
<li>Анимация  на основе ключевых точек</li>
</ol>
<p>Анимация по значениям – это как раз случай указанный выше.  Когда мы указываем, от какого, до какого значения будет изменяться свойство  нашего объекта.</p>
<p>Анимация на основе ключевых точек – это случай когда мы  указываем ключевые точки в которых происходит изменение свойств объекта, этих  точек может быть множество. Например, когда мы указываем движения по  треугольнику, где ключевые точки это вершины треугольника.</p>
<p>И так чтобы создать анимацию, делаем следующие шаги:</p>
<p>1) Создаем наш Rectangle:</p>
<p>Можно также создать его и в коде, если вам так удобней.</p>
<p>2) Теперь для того чтобы запустить анимацию нам надо знать  сколько, она будет длиться. Для задания времени используется объект Duration. </p>
<p>3) Создаем анимацию, указываем ей длительность.</p>
<p>4) Указываем объект, к которому будет применена анимация</p>
<p>5) Указываем свойство, которое мы будем изменять</p>
<p>6) Указываем новое значение</p>
<p>7) Создаем объект StoryBoard, и добавляем анимацию в его коллекцию</p>
<p>8) Запускаем StoryBoard</p>
<p><strong>Код XAML:</strong></p>
<pre>

&lt;UserControl x:Class=&quot;AnimationExamples.Page&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;400&quot; Height=&quot;300&quot;&gt;
  &lt;Canvas x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
  	&lt;Rectangle x:Name=&quot;MyRectangle&quot; Width=&quot;100&quot; Height=&quot;50&quot; Fill=&quot;Aqua&quot; /&gt;
  	&lt;Button x:Name=&quot;Start&quot; Content=&quot;Start&quot; Width=&quot;50&quot; Height=&quot;25&quot; Canvas.Top=&quot;100&quot;  Click=&quot;Start_Click&quot;  /&gt;
  &lt;/Canvas&gt;
  &lt;/UserControl&gt;
</pre>
<p><strong>Код C#:</strong></p>
<pre><code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace AnimationExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            //для того чтобы у нас прямоугольник устанавливался в начальное положение для повторной анимации
            MyRectangle.SetValue(Canvas.LeftProperty, (double)0);

            //Устаналиваем длительность 1 сек
            //в данном случае длительность анимации и всей коллекции совпадают
            Duration duration = new Duration(TimeSpan.FromSeconds(1));

            //создаем анимацию
            DoubleAnimation da = new DoubleAnimation();
            //Создаем коллекцию анимаций Storyboard
            Storyboard sb = new Storyboard();

            //Задаем длительность
            da.Duration = duration;
            sb.Duration = duration;

            //Устанавливаем объект к которому будет применятся анимация
            Storyboard.SetTarget(da, MyRectangle);
            //Устанавливаем свойство, которое будем изменять
            Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));

            //Устанавливаем новое значение свойства
            da.To = 200;
            //Добавляем в коллекцию
            sb.Children.Add(da);
            //начинаем анимацию
            sb.Begin();
        }
    }
}</code>
</pre>
<p>Добавим еще какую-нибудь анимацию, например, вращение.</p>
<p><strong>XAML:</strong></p>
<pre>

&lt;UserControl x:Class=&quot;AnimationExamples.Page&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;400&quot; Height=&quot;300&quot;&gt;
  &lt;Canvas x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
  &lt;Rectangle x:Name=&quot;MyRectangle&quot; Width=&quot;100&quot; Height=&quot;50&quot; Fill=&quot;Aqua&quot; &gt;
  	&lt;Rectangle.RenderTransform&gt;
  		&lt;TransformGroup&gt;
  			&lt;RotateTransform Angle=&quot;0&quot; /&gt;
  		&lt;/TransformGroup&gt;
  	&lt;/Rectangle.RenderTransform&gt;
  &lt;/Rectangle&gt;
  &lt;Button x:Name=&quot;Start&quot; Content=&quot;Start&quot; Width=&quot;50&quot; Height=&quot;25&quot; Canvas.Top=&quot;100&quot;  Click=&quot;Start_Click&quot;  /&gt;
  &lt;/Canvas&gt;
  &lt;/UserControl&gt;
</pre>
<p><strong>С#:</strong></p>
<pre><code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace AnimationExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            //для того чтобы у нас прямоугольник устанавливался в начальное положение для повторной анимации
            MyRectangle.SetValue(Canvas.LeftProperty, (double)0);
            TransformGroup tg = new TransformGroup();
            RotateTransform rt = new RotateTransform();
            rt.Angle = 0;
            tg.Children.Add(rt);
            MyRectangle.RenderTransform = tg;

            //Устаналиваем длительность 1 сек
            //в данном случае длительность анимации и всей коллекции совпадают
            Duration duration = new Duration(TimeSpan.FromSeconds(1));

            //создаем анимацию
            DoubleAnimation da = new DoubleAnimation();
            //Создаем коллекцию анимаций Storyboard
            Storyboard sb = new Storyboard();

            //Задаем длительность
            da.Duration = duration;
            sb.Duration = duration;

            //Устанавливаем объект к которому будет применятся анимация
            Storyboard.SetTarget(da, MyRectangle);
            //Устанавливаем свойство, которое будем изменять
            Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));

            //Устанавливаем новое значение свойства
            da.To = 200;
            
            //********* ВРАЩЕНИЕ ***************
            DoubleAnimation daRotate = new DoubleAnimation();
            //Устанавливаем объект к которому будет применятся анимация
            Storyboard.SetTarget(daRotate, MyRectangle);
            //Устанавливаем свойство, которое будем изменять
            Storyboard.SetTargetProperty(daRotate, new PropertyPath("(Rectangle.RenderTransform).(TransformGroup.Children)[0].(RotateTransform.Angle)"));
            //Устанавливаем новое значение свойства
            daRotate.To = 360;

            //Добавляем в коллекцию
            sb.Children.Add(daRotate);
            sb.Children.Add(da);
            //начинаем анимацию
            sb.Begin();
        }
    }
}</code></pre>
<p>Пример  анимации с испозование KeyFrame:</p>
<p>&nbsp;</p>
<p><strong>XAML:</strong></p>
<pre>

&lt;UserControl x:Class=&quot;AnimationExamples.Page&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;400&quot; Height=&quot;300&quot;&gt;
  &lt;Canvas x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
  	&lt;Rectangle x:Name=&quot;MyRectangle&quot; Width=&quot;100&quot; Height=&quot;50&quot; Fill=&quot;Aqua&quot; &gt;
  		&lt;Rectangle.RenderTransform&gt;
			&lt;TransformGroup&gt;
				&lt;RotateTransform x:Name=&quot;AngelTransform&quot; Angle=&quot;0&quot; /&gt;
			&lt;/TransformGroup&gt;
  		&lt;/Rectangle.RenderTransform&gt;
  	&lt;/Rectangle&gt;
  	&lt;Button x:Name=&quot;Start&quot; Content=&quot;Start&quot; Width=&quot;50&quot; Height=&quot;25&quot; Canvas.Top=&quot;100&quot;  Click=&quot;Start_Click&quot;  /&gt;
  &lt;/Canvas&gt;
  &lt;/UserControl&gt;
</pre>
<p><strong>С#:</strong></p>
<pre>
<code>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace AnimationExamples
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
        }

        private void Start_Click(object sender, RoutedEventArgs e)
        {
            //для того чтобы у нас прямоугольник устанавливался в начальное положение для повторной анимации
            MyRectangle.SetValue(Canvas.LeftProperty, (double)0);

            //Устаналиваем длительность 1 сек
            //в данном случае длительность анимации и всей коллекции совпадают
            Duration duration = new Duration(TimeSpan.FromSeconds(1));

            //создаем анимацию
            DoubleAnimationUsingKeyFrames da = new DoubleAnimationUsingKeyFrames();
            //Создаем коллекцию анимаций Storyboard
            Storyboard sb = new Storyboard();

            //Создаем наши точки (keyFrame) и определяем длительность и значение
            LinearDoubleKeyFrame keyFrame = new LinearDoubleKeyFrame();
            keyFrame.KeyTime = TimeSpan.FromSeconds((0.25));
            keyFrame.Value = 50;
            da.KeyFrames.Add(keyFrame);

            LinearDoubleKeyFrame keyFrame1 = new LinearDoubleKeyFrame();
            keyFrame1.KeyTime = TimeSpan.FromSeconds((0.75));
            keyFrame1.Value = 250;
            da.KeyFrames.Add(keyFrame1);

            LinearDoubleKeyFrame keyFrame2 = new LinearDoubleKeyFrame();
            keyFrame2.KeyTime = TimeSpan.FromSeconds((0.5));
            keyFrame2.Value = 350;
            da.KeyFrames.Add(keyFrame2);

            //Задаем длительность
            da.Duration = duration;
            sb.Duration = duration;

            //Устанавливаем объект к которому будет применятся анимация
            Storyboard.SetTarget(da, MyRectangle);
            //Устанавливаем свойство, которое будем изменять
            Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));

            //Добавляем в коллекцию
            sb.Children.Add(da);
            //начинаем анимацию
            sb.Begin();
        }
    }
}</code>
</pre>
<p>Здесь  показаны простые анимации, которые помогут вам понять основы анимации и начать  делать свои. В следующем уроке я покажу как создавать анимацию с помощью Blend Studio.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/sozdanie-animacii-v-blend-studio" title="Создание Анимации в Blend Studio (Ноябрь 16, 2008)">Создание Анимации в Blend Studio</a> (1)</li>
	<li><a href="http://silverlightru.net/rabota-s-video-chast-2" title="Работа с видео (Часть 2) (Апрель 29, 2008)">Работа с видео (Часть 2)</a> (4)</li>
	<li><a href="http://silverlightru.net/znakomstvo-s-animaciej-microsoft-silverlights" title="Знакомство с анимацией Microsoft SilverLights (Сентябрь 30, 2007)">Знакомство с анимацией Microsoft SilverLights</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/animaciya/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/animaciya</feedburner:origLink></item>
		<item>
		<title>Microsoft Silverlight 2 релиз</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/VIt2iMjV0Dg/microsoft-silverlight-2-reliz</link>
		<comments>http://silverlightru.net/microsoft-silverlight-2-reliz#comments</comments>
		<pubDate>Thu, 16 Oct 2008 10:23:35 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<category><![CDATA[Blend Studio 2]]></category>

		<category><![CDATA[release]]></category>

		<category><![CDATA[Silverlight 2]]></category>

		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://silverlightru.net/microsoft-silverlight-2-reliz</guid>
		<description><![CDATA[Ура! Господа, могу вас поздравить наконец-то появился официальный релиз Silverlight 2, которую мы ждали больше полугода. И вот наконец-то 13 октября microsoft презентовал релиз.
После выхода Silverligt 1, выпускалось две beta версии, в которых сразу были видны пути дальнейшего развития этой технологии. Конечно публика сразу оценила преимущества silverlight 2 перед своим младшым братом. И были исправлены [...]]]></description>
			<content:encoded><![CDATA[<p>Ура! Господа, могу вас поздравить наконец-то появился официальный релиз Silverlight 2, которую мы ждали больше полугода. И вот наконец-то 13 октября microsoft презентовал релиз.<br />
После выхода Silverligt 1, выпускалось две beta версии, в которых сразу были видны пути дальнейшего развития этой технологии. Конечно публика сразу оценила преимущества silverlight 2 перед своим младшым братом. И были исправлены и добавлены многие новые возможности. Естественно обновился весь сперктр программного обеспечния. Также появились многие патчи для стороних программ от microsoft, которые включили в себя поддержку silverlight.</p>
<p><span id="more-119"></span></p>
<p><a href="http://www.microsoft.com/presspass/press/2008/oct08/10-13Silverlight2PR.mspx?rss_fdn=Press%20Releases">Оригинал</a></p>
<p>Обновились и основные программные продукты для работы с Silverlight 2:<br />
- Новый патч для Visual Studio 2008<br />
- Новая Blend Studio 2</p>
<p>Все необходимые средства можно скачать - <a href="http://www.microsoft.com/silverlight/resources/tools.aspx">Здесь</a><br />
Дополнительную информацию на офицальном сайте Silverlight - <a href="http://silverlight.net"></a></p>
<p>Ну и конечно же, качаем обязательно сам плагин для брауезров:</p>
<p><a href="http://www.microsoft.com/silverlight/resources/install.aspx">Silverlight</a></p>
<p>Ключевые возможности Silverlight 2 включают в себя:</p>
<p>    * Поддержка .NET Framework вместе с библиотекой Rich Base Class Library: совместимое подмножество полной версии .NET Framework;<br />
    * Мощные встроенные элементы управления: включают в себя DataGrid, ListBox, Slider, ScrollViewer, Calendar controls и другие;<br />
    * Поддержка усовершенствованных образов и шаблонов: теперь проще создавать нужный вид приложений;<br />
    * Технология Deep Zoom: обеспечивает уникальную интерактивность и навигацию по изображениям с высоким разрешением;<br />
    * Комплексная поддержка работы в сети: уникальная поддержка для применения REST WS*/SOAP, POX, RSS и стандартных HTTP-сервисов, позволяющая пользователям создавать приложения, которые легко интегрируются с серверными системами;<br />
    * Расширенная языковая поддержка .NET Framework: лишь Silverlight 2 поддерживает различные языки программирования, среди которых: Visual Basic, C#, JavaScript, IronPython and IronRuby, что позволяет быстро сориентироваться разработчикам, уже владеющим этими языками;<br />
    * Улучшенная защита контента: Silverlight DRM на основе защиты контента PlayReady для связанных сред Silverlight;<br />
    * Улучшенная масштабируемость сервера и расширенная поддержка рекламных носителей: поддержка новых возможностей быстрой загрузки, лучших технологий поисковой оптимизации и встроенной рекламы следующего поколения;<br />
    * Партнерская экосистема: партнеры Microsoft по Visual Studio, среди которых ComponentOne, Infragistics и Telerik предоставляют продукты, усиливающие возможности создания приложений Silverlight при использовании Visual Studio;<br />
    * Кросс-платформенная и кросс-браузерная поддержка: поддержка Mac, Windows и Linux в Firefox, Safari, Internet Explorer.</p>
<p>P.S. Статью будем пополнять по мере того, как будет поступать информация о новшествах появившихся в релизе. Так, что заглядывайте.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/detskij-portal-ispolzoval-texnoloiyu-silverlight" title="Детский портал использовал технолоию Silverlight (Март 21, 2009)">Детский портал использовал технолоию Silverlight</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/microsoft-silverlight-2-reliz/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/microsoft-silverlight-2-reliz</feedburner:origLink></item>
		<item>
		<title>Обработка событий MouseLeftButtonDown и MouseLeftButtonUp у контрола - Slider</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/ilYRomFWOlo/obrabotka-sobytij-mouseleftbuttondown-i-mouseleftbuttonup-u-kontrola-slider</link>
		<comments>http://silverlightru.net/obrabotka-sobytij-mouseleftbuttondown-i-mouseleftbuttonup-u-kontrola-slider#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:36:02 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[MouseLeftButtonDown]]></category>

		<category><![CDATA[MouseLeftButtonUp]]></category>

		<category><![CDATA[Slider]]></category>

		<category><![CDATA[SustomSlider]]></category>

		<guid isPermaLink="false">http://silverlightru.net/obrabotka-sobytij-mouseleftbuttondown-i-mouseleftbuttonup-u-kontrola-slider</guid>
		<description><![CDATA[Custom Slider
После выхода на свет Silver Light beta 2 я столкнулся с проблемой, что у меня не работают события MouseLeftButtonDown и MouseLeftButtonUp. Ну как уже известно, Майкрософт изменило порядок обработки событий и фактически они существуют, но ничего не делают. 

И так представленный мной пример – видео плеера, будет работать некорректно в бета 2. Что конечно [...]]]></description>
			<content:encoded><![CDATA[<p>Custom Slider</p>
<p>После выхода на свет Silver Light beta 2 я столкнулся с проблемой, что у меня не работают события MouseLeftButtonDown и MouseLeftButtonUp. Ну как уже известно, Майкрософт изменило порядок обработки событий и фактически они существуют, но ничего не делают. </p>
<p><span id="more-112"></span></p>
<p>И так представленный мной пример – видео плеера, будет работать некорректно в бета 2. Что конечно совсем не радует, что же делать в таком случае. </p>
<p>Создадим свой класс CustomSlider в нем сделаем обработчики событий у ползунка (Thumb), которые позволят нам отслеживать необходимые нам действия. Оформим его в виде отдельного файла CustomSlider.cs:</p>
<pre>
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;

namespace Quantumart.Silverlight.Controls
{
	public class CustomSlider : Slider
	{
		//Определяем стиль по умолчанию  - от стандартного Slider
		public CustomSlider()
			: base()
		{
			DefaultStyleKey = typeof(Slider);
		}

		///
		///Происходит в тот момент, когда мы кликнули по ползунку и начали перетаскивать его
		///
		public event EventHandler ThumbDragStarted;

		///
		/// Происходит когда мы закончили перенос ползунка
		///
		public event EventHandler ThumbDragCompleted;
		public override void OnApplyTemplate()
		{
			base.OnApplyTemplate();

			//Достаем ползунок
			Thumb thumb = this.GetTemplateChild("HorizontalThumb") as Thumb;

			//Если он существует, его можно и удалить;))
			if (thumb != null)
			{
				//задаем обработчики событий DragStarted и DragCompleted
				thumb.DragStarted += new DragStartedEventHandler(thumb_DragStarted);
				thumb.DragCompleted += new DragCompletedEventHandler(thumb_DragCompleted);
			}
		}

		//обработчик события по завершению переноса ползунка
		void thumb_DragCompleted(object sender, EventArgs e)
		{
			OnThumbDragCompleted(this, new EventArgs());
		}

		//обработчик собюытия ан начало переноса ползунка
		void thumb_DragStarted(object sender, EventArgs e)
		{
			OnThumbDragStarted(this, new EventArgs());
		}

		//вызываем  необходимые нам события
		public virtual void OnThumbDragStarted(object sender, EventArgs e)
		{
			if (ThumbDragStarted != null)
				ThumbDragStarted(sender, e);
		}

		//вызываем  необходимые нам события
		protected virtual void OnThumbDragCompleted(object sender, EventArgs e)
		{
			if (ThumbDragCompleted != null)
				ThumbDragCompleted(sender, e);
		}
	}
}

 </code>
 </pre>
<p>Теперь используем наш слайдер в XAML:</p>
<pre>

&lt;UserControl x:Class=&quot;Quantumart.Silverlight.Controls.MPLayer&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  xmlns:CC=&quot;clr-namespace: Silverlight.Controls;assembly= Silverlight.Controls&quot;
  Width=&quot;400&quot; Height=&quot;100&quot; xmlns:vsm=&quot;clr-namespace:System.Windows;assembly=System.Windows&quot;&gt;
  	&lt;Grid x:Name=&quot;LayoutRoot&quot; ShowGridLines=&quot;True&quot;&gt;
		&lt; CC:CustomSlider x:Name=&quot;PlayerSlider&quot; Width=&quot;300&quot; Canvas.Left=&quot;55&quot;
			ThumbDragStarted=&quot;PlayerSlider_ThumbDragStarted&quot;
			ThumbDragCompleted=&quot;PlayerSlider_ThumbDragCompleted&quot; /&gt;&lt;/Grid&gt;
  &lt;/UserControl&gt;
</pre>
<p>Выполняем действия по происшествию событий:</p>
<pre>
<code>private void PlayerSlider_ThumbDragStarted(object sender, EventArgs e)
{
	//Какие то действия по началу
}

private void PlayerSlider_ThumbDragCompleted(object sender, EventArgs e)
{
	//Какие то действия по окончанию
}</code>
</pre>
<p>Вот такой выход есть решения этой проблемы он не единственный. Второй вариант несколько проще, но идет с использование VSM. Для нам необходимо использовать Blend Studio.</p>
<p>Создаем новый проект. И добавляем стандартный слайдер.</p>
<p>Теперь нам надо отредактировать темплейт стандартного слайдера. Для этого кликаем в верхней части  экрана (см. скрин).</p>
<p><a href='http://silverlightru.net/wp-content/uploads/2008/09/hh1.jpg' title='http://silverlightru.net/'><img src='http://silverlightru.net/wp-content/uploads/2008/09/hh1.jpg' alt='http://silverlightru.net/' /></a></p>
<p>После того как мы вошли в редактирование темплейта. </p>
<p><a href='http://silverlightru.net/wp-content/uploads/2008/09/hh2.jpg' title='http://silverlightru.net/'><img src='http://silverlightru.net/wp-content/uploads/2008/09/hh2.jpg' alt='http://silverlightru.net/' /></a></p>
<p>В левой панели откроется компоненты из которых состоит наш слайдер, нас интересует HorizontalThumb. Заходим в его свойства, и переходим на панель событий находим события DragStarted и DragCompleted.</p>
<p><a href='http://silverlightru.net/wp-content/uploads/2008/09/hh3.jpg' title='http://silverlightru.net/'><img src='http://silverlightru.net/wp-content/uploads/2008/09/hh3.jpg' alt='http://silverlightru.net/' /></a></p>
<p><a href='http://silverlightru.net/wp-content/uploads/2008/09/hh4.jpg' title='http://silverlightru.net/'><img src='http://silverlightru.net/wp-content/uploads/2008/09/hh4.jpg' alt='http://silverlightru.net/' /></a></p>
<p>  Это способ очень удобен тем, что на самом деле нам с вами не надо писать код, все за нас генерируется Blend Studio. Что мне не нравиться в этом подходе, что необходимо все это делать обязательно через Blend Studio. Генерируемый код иногда вызывает сбои в работе самой Blend Studio, это конечно неприятно, но и мне как не очень нравиться когда слишком много XAML кода, он становится крайне сложно поддерживаемый и непонятный. И к тому же плохо отлаживаемый! Это конечно чисто мое мнение. Оба метода работают, и могут быть использованы. Да и на самом деле они делают одно и тоже обрабатывают события Thumb.</p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li>No related posts.</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/obrabotka-sobytij-mouseleftbuttondown-i-mouseleftbuttonup-u-kontrola-slider/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/obrabotka-sobytij-mouseleftbuttondown-i-mouseleftbuttonup-u-kontrola-slider</feedburner:origLink></item>
		<item>
		<title>Custom Control</title>
		<link>http://feedproxy.google.com/~r/silverlightru/ZgFo/~3/BVgpbyGUDB8/custom-control</link>
		<comments>http://silverlightru.net/custom-control#comments</comments>
		<pubDate>Sat, 13 Sep 2008 13:03:53 +0000</pubDate>
		<dc:creator>LOB</dc:creator>
		
		<category><![CDATA[Примеры]]></category>

		<category><![CDATA[Custom control]]></category>

		<category><![CDATA[UserControl]]></category>

		<category><![CDATA[Контролы]]></category>

		<category><![CDATA[приложения]]></category>

		<guid isPermaLink="false">http://silverlightru.net/custom-control</guid>
		<description><![CDATA[Сегодня мы поговорим о Custom Control. Что такое Custom Control?
    Custom Control – это класс унаследованный от UserControl, который содержит набор полей  и методов а также свое представление в виде XAML, которые обеспечивают  работу этого контрола. Затем этот контрол может встраиваться в другую  страницу (он же самый UserControl). Custom [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы поговорим о Custom Control. Что такое Custom Control?<br />
    <strong>Custom Control</strong> – это класс унаследованный от UserControl, который содержит набор полей  и методов а также свое представление в виде XAML, которые обеспечивают  работу этого контрола. Затем этот контрол может встраиваться в другую  страницу (он же самый UserControl). Custom Control могут быть как  универсальные, которые могут быть использованы в любом проекте,  например, какой-нибудь слайдер, галерея и т.п. А могут относиться  только к данному проекту и использоваться только в этом проекте. Для  примера, можно вынести в отдельный контрол меню, блок баннеров и т.д.</p>
<p><span id="more-102"></span></p>
<p><span> </span>Сегодня  я сделаю простой User Control и покажу его использование. Мы создадим  простые часики, которые будут показывать дату и время, иметь несколько  настроек. Мы можем менять цвет фона, цвет текста, и формат вывода даты.</p>
<p>Для начала создаем два User Control Page.xaml, Clock.xaml. На Clock создадим одно текстовое поле и все J</p>
<p><strong>Clock.xaml</strong>:</p>
<pre>

&lt;UserControl x:Class=&quot;CustomControl.Clock&quot;
  xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
  xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
  Width=&quot;200&quot; Height=&quot;50&quot;&gt;
  &lt;Grid  x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;  VerticalAlignment=&quot;Center&quot; HorizontalAlignment=&quot;Center&quot;&gt;
  	&lt;TextBlock  x:Name=&quot;Time&quot;   Text=&quot;SomeText&quot; Foreground=&quot;Red&quot; /&gt;
  &lt;/Grid&gt;&lt;/UserControl&gt;
</pre>
<p>Чтобы вы видели, что наш контрол изменит свой вид по умолчанию мы задали ему цвет фона, цвет текста и какой то текст.</p>
<p>&nbsp;</p>
<div id="attachment_108" class="wp-caption alignnone" style="width: 145px"><a href="http://silverlightru.net/wp-content/uploads/2008/09/gg1.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/09/gg1.jpg" alt="http://silverlightru.net/" width="135" height="50" class="size-medium wp-image-108" /></a><p class="wp-caption-text">http://silverlightru.net/</p></div>
<p>&nbsp;</p>
<p>По умолчанию у нас будет грузиться страница Page.xaml. Если вы  хотите посмотреть, что у нас получилось в нашем Clock.xaml, тогда надо  в файле App.xaml.cs поменять:</p>
<p>this.RootVisual = new Page();</p>
<p>на </p>
<p>this.RootVisual = new Clock ();</p>
<p>Убедились что все работает, как мы задумывали и возвращаем все обратно.</p>
<p>Теперь нам необходимо создать свойства для наших свойств контрола,  которые мы будем менять, это фон, цвет текста, и формат. Затем мы  обрабатываем эти значения в событии Loaded контрола Clock. Встаем  задача, так как у нас формат задается определенным образом, то нам надо  как-то это учитывать, чтобы пользователь не мучился, какой же формат  правильный, но и мог увидеть, какие вообще форматы существуют. Для  этого создадим перечисление форматов (enum). В чем еще преимущество в  том, что enum наш будет отображаться в Visual Studio при вызову  intelecence.</p>
<p> </p>
<div id="attachment_104" class="wp-caption alignnone" style="width: 310px"><a href="http://silverlightru.net/wp-content/uploads/2008/09/cc3.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/09/cc3.jpg" alt="http://silverlightru.net/" width="300" height="142" class="size-medium wp-image-104" /></a><p class="wp-caption-text">http://silverlightru.net/</p></div>
<p><a href="http://silverlighter.ru/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/silverlighter_5F00_blog/cc3_5F00_4.jpg"></a> </p>
<p><strong>Код С#:</strong></p>
<pre>
<code>namespace CustomControl
{
    public partial class Clock : UserControl
    {
        public SolidColorBrush TextColor { get; set; } //Цвет текста
        public SolidColorBrush LayoutColor { get; set; } //Цвет фона
        public Formats Format { get; set; } //Наш список форматов
        public Clock()
        {
            InitializeComponent();

			//создаем обработчик события, чтобы использовать значения наших свойств
            Loaded += new RoutedEventHandler(Clock_Loaded);
        }

        void Clock_Loaded(object sender, RoutedEventArgs e)
        {
			//устанавливаем свойство цвета текста
            if (TextColor != null)
                Time.Foreground = TextColor;

			//устанавливаем свойство цвета фона
            if (LayoutColor != null)
                LayoutRoot.Background = LayoutColor;

			//устанавливаем свойство текста и задаем ему формат
            Time.Text = DateTime.Now.ToString(Format.ToString());
        }

		//Форматы доступные для использования в DateTime структуре
        public enum Formats { 
            d, D, t, T, f, F, g, G, M, R, s, u, U, Y, o
        }
    }
}</code>
</pre>
<p>Наш контрол создан, он работает. Но как же нам использовать наш  контрол там, где нам нужно и задавать ему разные настройки? Вернемся к  нашему Page.xaml. Для того, чтобы использовать Custom Controls,  необходимо подключить assembly к которому они относятся и также указать  namespace в котором находится наш контрол.</p>
<p>Открываем Page.xaml и добавляем туда следующую строчку, так как наши  контролы можно было не указывать assembly, но чтобы было понятней, я  привожу нормальную запись.</p>
<p><strong>XAML</strong>:</p>
<pre>

&lt;UserControl x:Class=&quot;CustomControl.Page&quot;
     xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
     xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot; 
&lt;!—Подключаем наш assembly --&gt;

     xmlns:CC=&quot;clr-namespace:CustomControl;assembly=CustomControl&quot;
     Width=&quot;400&quot; Height=&quot;300&quot;&gt;
    &lt;Grid  x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot;&gt;
        &lt;CC:Clock  TextColor=&quot;Aquamarine&quot; LayoutColor=&quot;Bisque&quot;  Format=&quot;G&quot; /&gt;
    &lt;/Grid&gt;
&lt;/UserControl&gt;
</pre>
<p>Расмотрим строку:<br />
  xmlns:CC=&quot;clr-namespace:CustomControl;assembly=CustomControl&quot;</p>
<p>СС – специальный префикс, который мы будем использовать для обозначения нашего контрола. Например:</p>
<pre>&lt;CC:Clock TextColor=&quot;Aquamarine&quot;  LayoutColor=&quot;Bisque&quot; Format=&quot;G&quot; /&gt;</pre>
<p>clr-namespace:CustomControl; - Указываем namespace CustomControl надо поменять при необходимости на ваш namespace</p>
<p>assembly=CustomControl; - Указываем assembly CustomControl надо поменять при необходимости на ваш assembly</p>
<p>Далее задаем уже используем наш контрол, задавая ему необходимые свойства TextColor, LayoutColor, Format.</p>
<p>Используйте Custom Control там, где вам удобно, если вам кажется,  что логика программы должна быть вынесена в виде отдельного контрола,  сделайте это. Если ваш код универсален и может быть использован во  многих местах, опять используйте Custom Control.</p>
<p>&nbsp;</p>
<div id="attachment_111" class="wp-caption alignnone" style="width: 222px"><a href="http://silverlightru.net/wp-content/uploads/2008/09/gg6.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/09/gg6.jpg" alt="http://silverlightru.net/" width="212" height="34" class="size-full wp-image-111" /></a><p class="wp-caption-text">http://silverlightru.net/</p></div>
<p>&nbsp;</p>
<div id="attachment_110" class="wp-caption alignnone" style="width: 235px"><a href="http://silverlightru.net/wp-content/uploads/2008/09/gg5.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/09/gg5.jpg" alt="http://silverlightru.net/" width="225" height="45" class="size-full wp-image-110" /></a><p class="wp-caption-text">http://silverlightru.net/</p></div>
<p>&nbsp;</p>
<div id="attachment_109" class="wp-caption alignnone" style="width: 127px"><a href="http://silverlightru.net/wp-content/uploads/2008/09/gg4.jpg"><img src="http://silverlightru.net/wp-content/uploads/2008/09/gg4.jpg" alt="http://silverlightru.net/" width="117" height="60" class="size-full wp-image-109" /></a><p class="wp-caption-text">http://silverlightru.net/</p></div>
<p>&nbsp;</p>
<p> P.S. Вообще, в данной ситуации наш контрол должен быть скорей  назван Calendar, я в начале задумывал его немного по другому. Кого это  смущает могу перименовать </p>

<!-- Generated by Simple Tags 1.0.4 - http://www.herewithme.fr/wordpress-plugins/simple-tags -->
	<h4>Related posts</h4>
	<ul class='st-related-posts'>
	<li><a href="http://silverlightru.net/databinding-chast-2-metod-vyneseniya-kontrola" title="DataBinding (часть 2 - метод вынесения контрола) (Декабрь 8, 2008)">DataBinding (часть 2 - метод вынесения контрола)</a> (3)</li>
	<li><a href="http://silverlightru.net/primer-sozdaniya-prostogo-silverlight-prilozheniya-chast-3" title="Пример создания простого Silverlight приложения (часть 3) (Сентябрь 21, 2007)">Пример создания простого Silverlight приложения (часть 3)</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://silverlightru.net/custom-control/feed</wfw:commentRss>
		<feedburner:origLink>http://silverlightru.net/custom-control</feedburner:origLink></item>
	</channel>
</rss>
