Сообщения

Сообщения за сентябрь, 2009

Создание изображения из экранного вывода WPF и Silverlight. Попросту Snapshot из Silverlight и WPF.

Мне не терпиться поделиться новостью, что несколькими строчками кода можно создать изображение из любого элемента Silverlight или WPF. Для этого не нужно использовать Windows API (хотя тоже можно, как вариант). Применяются для получения изображений классы из пространства имен .NET Framework System.Windows.Media.Imaging и System.Windows.Media. Можно получить снэпшет как с любого элемента, так и со всего окна сразу. Полученное изображение в Silverlight можно передать по WCF на сервер или даже предложить пользователю сохранить на диск. Я создал примеры для WPF и Silverlight. Мне требуется их осмыслить, немного причесать перед выкладыванием, но срочный проект на работе забрал все мои ресурсы, в т.ч. свободного времени. Я заимусь этим позже, тк всеравно это будет использоватся по работе. Но я считаю, что мы все грамотные разработчики, поэтому для нас действует принцип: “Осведомлен, значит вооружен”. Итак, я вас вооружил :) Погуглите, поищите в MSDN-форумах, походите по блогам. В том числе в

Silverlight не поддерживает RoutedEvent в EventTrigger, кроме Loaded

Если вы получили похожую ошибку: Unhandled Error in Silverlight Application Attribute UIElement.MouseEnter value is out of range. то давайте ее полечим. Исходный код: Source for VS 2008 Книга "Введение в Silverlight 3" на странице 112 говорит “... обратите внимание, что RoutedEvent поддерживает только событие Loaded (Загружен). ” Т.е. как в WPF, декларативно через XALM, это не работает. Т.е. Silverlight 3 (и предшественники) для атрибута RoutedEvent в элементе EventTrigger в XALM разметке поддерживает только значение Loaded. Но уже давно есть решение, например RoutedEvent on EventTrigger is giving error that Rectangle.MouseEnter value is out of range Опишу его более подробно. Сначала посмотрим на разметку: <UserControl x:Class="SilverlightAnimation.MainPage" xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=" http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d=" http://schemas.microsoft.com/expression/blend/200

WPF-серия. Группы валидации в WPF

Пока разбирался с валидацией в WPF успел создать функционал групп валидации, наподобии ASP.NET. Сделал свои ананлог, но теперь, честно говоря, досканально поняв и поработав с валидацией в WPF и Silverlight, я бы сделал группы валидации по другому, а может и не стал бы делать вообще. Слишком большое поле для кастомизации, что-бы еще притаскивать на это “поле” группы валидации.  

Выделение любого текста в GUI Silverlight и WPF

Задача сделать пользовательский интерфейс, в котором, как в браузере можно выделять любой текст. Другими словами, чтоб любой текст на экране можно было выделить, а не талько в элементах для ввода текста. В WPF для этого используется немного настроенный TextBox со свойством IsReadOnly=”true” Используется следующий стиль <Style x:Key="Texted" TargetType="TextBox"> <Setter Property="IsReadOnly" Value="True" /> <Setter Property="BorderThickness" Value="0" /> <Setter Property="Background" Value="Transparent" /> <Setter Property="IsTabStop" Value="False" /> </Style> В Silverlight 3 этот фокус теперь не пройдет, тк появилось закрашивание серым цветом если IsReadOnly=”true” Решается это следующим кастомным стилем (например разместите его в App.xaml в ResourceDictionary) <Style x:Key="OnlySelectedTextBox" TargetType="TextBox"> <Sett