Показаны сообщения с ярлыком Silverlight. Показать все сообщения
Показаны сообщения с ярлыком Silverlight. Показать все сообщения

Azure и Silverlight

image

Ура! Вышел Silverlight 4 Beta! Начинаю его тестить!

image

Вышел также и новый Blend! Blend 4 Beta. Пишу статью, и параллельно его качаю!

Майкрософт все радует и радует нас новыми продуктами. Стоит еще отметить WCF RIA Services. Это все таки радует. Т.к. RIA и WCF тесно взаимодействуют. MS умудрились запихнуть их в один инсталлер. Скачаю – посмотрю, что получилось. А пока…

А пока ставится Silverlight Tools. Я честно не понимаю, к чему это обилие инструментов. Тот же бесполезный SketchFlow! То, что я могу нарисовать на бумаге или представить у себя в голове. Лишний раз дизайнить и делать концепт-приложения. По-моему это нужно лишний раз педантам, которые привыкли все делать “как надо”. Может для каких-то специфичных проектов – но по мне, это трата времени. Для мелких проектов Sketch не нужен. Для крупных – возможно. Но там за всем этим следят Leader Programmer-ы или Team Leader-ы. Т.е. на общую концепцию. Разве что им. Еще раз – проще взять лист бумаги и тут же нарисовать, что хочешь. Чем лишний раз изучать новую тулзу.

А пока все! Всем удачи в освоении новых технологий!

Обзор Visual Studio 2010 Beta 2

Сегодня утром я проснулся, зашел в приложение “Почта Windows Live” проверить свою электронную почту, и обнаружил клевое письмо!

image

Вышла наконец-то Beta 2! Это большое событие, после чего я сразу же поставил на закачку Visual Studio 2010 Beta 2 Ultimate. Среда Разработки поставляется в 3-х версиях: Professional, Premium и Ultimate.

Версия Ultimate конечно же самая полная и самая классная!

После того, как студия скачалась, я тут же поставил ее на установку.

image

Новое окно запуска(Splash Screen) в сине-фиолетовых тонах:

Безымянный

После установки, первое, что бросается в глаза – новый интерфейс, полностью переписанный на WPF:

image

Как вы можете легко заметить, все красиво раскидано по категориям, что удобно. Да и на глаз приятно.

ToDo: Надо как-нибудь нарисовать на досуге обложку для DVD для Visual Studio Beta 2

Нажимаю на кнопку, точнее на пункт меню слева – Новый проект…

image

Лично мне нравится обновленный дизайн! =)

Слева – дерево типов проектов, посередине – выбор типа из категории, справа – описание. Удобно.

Еще стоит отметить, что у нас есть .Net Framework 4 в качестве основной платформы приложения.

Для примера, я взял и создал приложение WPF на .Net 4:

image

Обновленный дизайн, карамельного цвета кнопки, подсветка.

Стоит заметить, что наблюдается падение производительности при работе со студией.

Но все это удобство того стоит.

Минимальные системные требования на мой взгляд:

2-хядерный процессор >1.5 ГГц Intel/AMD, 1 гигабайт оперативной памяти, желательно DDR3,              винчестер пошустрее - SATA/PATA.

И видеокарту не ниже GF 8 поколения.

Тулбокс:

image

Стоит отметить, что в MS VS 2010 Beta 2 теперь можно разрабатывать приложения Azure, SharePoint 2010, плагины для Office 2010.

На этом обзор новой студии я заканчиваю. Удобно, красиво, но пока еще тормозит. Стоит ли использовать .Net 4 сейчас? Ради интереса – можно. Стоит сказать, что основной платформой сейчас стала Windows 7, с предустановленным .Net Framework 3.5, поэтому есть смысл разрабатывать свое ПО именно под эту платформу, ведь не так много найдется энтузиастов, которым захотелось бы снова качать очередное обновление с сайта Майкрософт ради небольшой программы. А для коммерческих целей эта студия не подходит, т.к. еще находится под лицензией Бета и предназначена только для тестов.

Так что тестируем, смотрим, изучаем!

GetValue & Set Value

У меня есть сетка Grid. В каждой ячейке находится какой-то объект. У меня это множество объектов типа TextBlock.

image

Моя задача была при нажатии кнопки менять местами какие-либо элементы. Например, я хочу поменять местами TextBlock-и 8 и 9. Для этого в обработчике нажатия на кнопку я пишу:

tb_hor9.SetValue(Grid.ColumnProperty, 9);
tb_hor8.SetValue(Grid.ColumnProperty, 10);

Чтобы вывести на экран уже истинное положение объекта, я использую функцию GetValue():

TbxHor.Text = tb_hor8.GetValue(Grid.ColumnProperty).ToString();

Я долго искал, как получить доступ к динамически созданному элементу, даже нашел код:

public UIElement FindElement(string TagName, Panel p)
{
UIElement FoundEl = null;
foreach (UIElement el in p.Children)
{
if (((FrameworkElement)el).Tag is string)
if ((string)(((FrameworkElement)el).Tag) == TagName)
FoundEl = el;
if (FoundEl == null)
if (el is Panel)
{
UIElement result = FindElement(TagName, (Panel)el);
if (result != null)
FoundEl = result;
}
}
return FoundEl;
}


Код хороший, но не оптимизированный, темболее есть встроенная команда о которой я расскажу в своем примере:
продолжу статью «Web-службы WCF в Silverlight» С помощью сервиса мы получали текстовую строку «Hello,{0}! How are you?"» где {0} - имя, которое вы ввели в TextBox
Теперь мы не будем добавлять в Silverlight страницу, а создадим ее динамически
И так, код при нажатии на клавишу должен добавить динамический элемент «OutField», а при получении результата с сервиса записывается текст в только что добавленный элемент
Для этого делаем:
1. В обработчике клавиши добавим код:
private void CallService_Click(object sender, RoutedEventArgs e)
{
***Старый код***
TextBlock OutField = new TextBlock();
OutField.Name = "OutField";
OutField.Inlines.Add(“Полученный результат с сервера: ”);
LayoutRoot.Children.Add(OutField);
}

2. В методе proxy_TellMeSomethingCompleted заменим
OutField.Text = e.Result;
на
((TextBlock)LayoutRoot.FindName("OutField")).Inlines.Add(e.Result);


Если мы запустим наш пример и попробуем нажать на клавишу, то сначала появится Предложение “Полученный результат с сервера: ”, а потом добавится результат с сервера.


Дополнения:

Но не забудьте поставить размеры или положение для контрола OutField, так как посте создания, он занимает все пространство.

При создании контрола можно сделать проверку, чтобы при вторичном нажатии на кнопку невыводило ошибку:

if (LayoutRoot.FindName("OutField") == False)
{

}


Это сырой пример, но он показывает, как можно создать контрол, и управлять им уже вовремя работы программы, что добавляет в вашу программу немного динамичности…

MS Expression Design & MS Expression Blend

Меня заинтересовали возможности этих двух программ. И я решил их изучить более подробно. Методом проб и ошибок, чтения статей и разговоров с другими блоггерами, я научился делать разные классные вещи.

image

Например, делать скиннинг для TextBox-a. Это просто, если знаешь как. Скин рисуется в Expression Design, затем экспортируется в Silverlight Canvas XAML. После чего импортируется MS Expression Blend-ом.

Далее мне пришлось немного помучаться, прежде чем я нашел способ как прикрутить стиль к моей кнопке.

Еще я нарисовал модель плеера, очень напоминающую iPod Touch:

Slice 1

И логотип Leopard-а:

OSX Logo

Нравится мне продукция Apple. Что поделаешь =)

Оконный интерфейс:

image

Менюшка c официального сайта Apple:

image

Также оформил картинку для словаря, в одной моей лабораторной по Информационной Безопасности:

InfoSec image

И напоследок, я решил нарисовать постер к ASOT 400, который уже прошел. Я очень ценю творчество Armin Van Buuren-а и надеюсь в будущем попасть на его сеты:

Armin ASOT 400 Logo

На этом все! MS Expression Design & Blend предоставляют все возможности для творчества, оформительских работ и всего, что относится к дизайну!

LINQ для прикладных задач

Решил написать статью на тему LINQ. LINQ – удивительная штука, особенно, если не хочешь сидеть и мучиться с SQL-запросами. Тут кому что ближе. Мне без разницы.

Но все же, LINQ.

В качестве примера я взял свой проект, над которым сейчас сижу. По моей задумке данные должны передаваться из двух полей типа TextBox в WCF-службу, а она с помощью LINQ, должна записывать их в Базу Данных.

Добавляю в проект файл типа Linq to SQL– DataClasses1.dbml:

image

Называю сущность именем postconn.

Дальше – интересней. В своей WCF-службе пишу такой код:

var dm = new DataClasses1DataContext();
var pc = new postconn {pname = a, pbody = b};
dm.postconns.InsertOnSubmit(pc);
dm.SubmitChanges();

Думаю тут нужно объяснить. Я создаю новый DataContext и называю его dm.

Затем создаю новую переменную типа postconn. Здесь уже идет сам синтаксис LINQ.

В третей строке я выполняю команду InsertOnSubmit, и в четвертой сам SubmitChanges.

InsertOnSubmit – заменяет стандартный оператор SQL Insert, после чего я применяю изменения.

Задача LINQ – облегчить манипулирование данными. Таблицы становятся как бы классами и с ними становится очень удобно работать.

Введение в .Net

Итак начнем с терминологии.

.Net Framework – платформа для разработки приложений.

Одной из основных идей Microsoft .NET является совместимость различных служб, написанных на разных языках. Т.е. можно писать систему или программный продукт на разных языках программирования(Delphi for .Net, IronPython, C#, VB.Net, C++.Net) и потом собирать вместе так, что все это еще и работать будет :)

Silverlight – платформа для разработки мультимедийных Web-ориентированных приложений, или сайтов.

WPF – Windows Presentation Foundation – универсальная платформа для разработке графического интерфейса (Graphical User Interface)

XAML – Расширяемый язык разметки приложений. Используется как для создания оконных Windows приложений(WPF), также я для Web-ориентированных (Silverlight)

WCF – Windows Communication Foundation, по сути это платформа для создания сетевых распределенных приложений. Новая ступень в развитии Web-служб. Мы можем всю логику нашего клиентского приложения вынести в WCF-службу и без проблем цепляться к ней из WPF Windows приложения, либо Silverlight-сайта.

Drag & Drop объектов в Silverlight

Решил реализовать одну забавную функцию. Drag & Drop используется в игрушках, в настольных приложениях. Везде, где надо что-то и куда-то перемещать :)

Создаем объект, я выбрал Rectangle. Смотрите, что вам ближе.

Далее переходим непосредственно к программированию.

 

public MainPage()
{
    InitializeComponent();    //Инициализация
    this.myrect.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(myrect_MouseLeftButtonDown);   //Добавляем событие на нажатие кнопки мыши
    this.myrect.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(myrect_MouseLeftButtonUp);   //Добавляем событие на тот момент, когда вы отпускаете кнопку мыши
    this.myrect.MouseMove += new System.Windows.Input.MouseEventHandler(myrect_MouseMove);   //Добавляем событие, когда перемещаем объект
}
private Boolean ismyRectMouseCapture = false;    //Нам нужна вспомогательная переменная, чтобы понять, “зацепили” мы или нет наш объект!
private Point clickPosition;   //Вспомогательная переменная для определения положения указателя мыши
private void myrect_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    clickPosition = e.GetPosition(sender as UIElement);   //
    this.myrect.CaptureMouse();
    ismyRectMouseCapture = true;
}

private void myrect_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    this.myrect.ReleaseMouseCapture();
    ismyRectMouseCapture = false;
}

private void myrect_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (ismyRectMouseCapture)
    {
        this.myTranslateTransform.X = e.GetPosition(this).X-clickPosition.X-(myrect.Width/2); //Думаю тут все понятно =)
        this.myTranslateTransform.Y = e.GetPosition(this).Y-clickPosition.Y-(myrect.Height/2);
    }
}

Как динамически загрузить картинку в Silverlight

В общем задача тривиальная и простая. Я раньше не знал как это делается. Мне помог один человек. Его блог: http://www.dev.net.ua/blogs/sergeylutay
Спасибо, тебе, Серега!
Он отозвался на мою просьбу о помощи, и помог разобраться с этой задачей. Бывает, что даже с простыми вещами разобраться порой очень трудно, особенно, если ты – новичок в этом. А оказывается очень просто. Приведенный ниже пример демонстрирует как можно программно, из кода добавлять в LayoutRoot дочерние элементы и обновлять интерфейс.
Image img = new Image();    
BitmapImage bimg = new BitmapImage(new Uri("http://www.wallpaperez.info/wallpaper/models/m/Adriana-Lima-wallpapers-796.jpg", UriKind.Absolute));
//если заранее не известен размер загружаемой картинки
bimg.ImageOpened += delegate(object sender, RoutedEventArgs e)
{
BitmapImage bitmapImg = sender as BitmapImage;
img.Height = bitmapImg.PixelHeight;
img.Width = bitmapImg.PixelWidth;
};
img.Source = bimg;
LayoutRoot.Children.Add(img);
Все очень просто. Создаем объект типа Image. Затем, создаем обект BitmapImage, и к нему привязываем картинку по URI. Далее указываем размеры изображения.
После чего объекту Image указываем в качестве источника наш BitmapImage-объект.
И, вуаля! Добавляем на нашу страницу в строке
LayoutRoot.Children.Add(img);
Подозреваю, что объекты можно засовывать в любые контейнеры. Надо будет покопаться ;)
Вот и все!

Web-службы WCF в Silverlight

Сегодня я расскажу, как создавать проект Silverlight, в паре с Web-службой Windows Communication Foundation и как-то взаимодействовать с этой службой.
Начнем с того, что запустим MSVS 2008:
image
Далее, появляется окно, тут тоже просто ОК:
image
Создается проект Silverlight. Silverlight просто как статичный сайт нам не интересен. Давайте сделаем динамику. Чтобы можно было отправлять какие-то данные, получать какие-то данные. Для этого нам понадобится WCF-сервис.

addfile
В меню выбираем Web-сервис WCF, как-нибудь его называем и жмем кнопку Add:
image
В файле IMyWCFService.cs объявляем интерфейс функции TellMeSomething:
public interface IMyWCFService
{ [OperationContract] string TellMeSomething(string name); }


Далее переходим в файл MyWCFService.svc.cs:

image

Пишем нашу функцию TellMeSomething:

public class MyWCFService : IMyWCFService 
{
#region IMyWCFService Members public string TellMeSomething(string name)
{
return string.Format("Hello, {0} ! How are you?", name);
} #endregion
}
Далее мы идем в файл Web.config, находим пункт
<endpoint address="" binding="wsHttpBinding" contract="WebServicesForBlog.Web.IMyWCFService">
и меняем wsHttpBinding на basicHttpBinding.

Настройки конфигурационного файла на этом закончены.


Теперь возвращаемся к Silverlight-проекту и проектируем страницу:
<Grid x:Name="LayoutRoot">
<StackPanel x:Name="OurStackPanel" Orientation="Vertical">
<TextBox x:Name="InputStr"></TextBox>
<Button x:Name="CallService" Content="Call WCF Service" Click="CallService_Click"></Button>
</StackPanel>
</Grid>



Далее нам нужно подключить WCF-службу, что мы создали:
image


После чего в появившемся окне нажимаем кнопку – Discover, и вводим поле Namespace референс, т.е. название экземпляра нашей WCF-службы:

image

И нажимаем ОК.

Все, теперь службу WCF мы подключили к проекту. Осталось ее использовать.
Допишем в разметку еще и TextBlock для вывода текста:

<TextBlock x:Name="OutField"></TextBlock>

А теперь перейдем к программированию кнопки:
private void CallService_Click(object sender, RoutedEventArgs e) {
MyWCFServiceReference.MyWCFServiceClient proxy = new WebServicesForBlog.MyWCFServiceReference.MyWCFServiceClient();
proxy.TellMeSomethingCompleted += new EventHandler<WebServicesForBlog.MyWCFServiceReference.TellMeSomethingCompletedEventArgs>(proxy_TellMeSomethingCompleted);
proxy.TellMeSomethingAsync(InputStr.Text);
}

И добавим EventHandler для события, когда служба WCF уже отработала:

void proxy_TellMeSomethingCompleted(object sender, WebServicesForBlog.MyWCFServiceReference.TellMeSomethingCompletedEventArgs e)
{
OutField.Text = e.Result;
}

Теперь запускаем проект! Вводим имя в Textbox и нажимаем кнопку "Call WCF Service"

image

Служба обрабатывает значение из TextBox-а и возвращает значение в TextBlock. Таким образом службы WCF – это обширная платформа для разработки многофункциональных динамических Silverlight-приложений. WCF нужен там, где используется обмен и обработка данных сервером.