Сообщения

Создание изображения из экранного вывода 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...

Размещение строки создания (наполнения) нового элемента первой строкой в DataGrid WPF Toolkit.

По умолчанию строка для добавления/наполнения нового элемента расположена внизу DataGrid WPF. Для её размещения сверху нужно обратиться к представлению по умолчанию для коллекции, которая будет привязана к DataGrid, привести его к IEditableCollectionView (представлению для редактирования) и задать соответствующий параметр NewItemPlaceholderPosition. Вот как это выглядит в коде: var view = (IEditableCollectionView)CollectionViewSource.GetDefaultView(productGroups); view.NewItemPlaceholderPosition = NewItemPlaceholderPosition.AtBeginning; Добавьте этот код после создания привязываемой коллекции, можно, даже, до ее наполнения. Вот как-то так :) Взято из WPF DataGrid – New Item Template Sample .

ODP.NET versus System.Data.OracleClient

Нету больше System.Data.OracleClient. В четвертой версии .NET Framework он deprecated. Microsoft решила свернуть его развитие. Источник: ADO.NET team blog Ну чтож, ODP.NET тоже можно кушать. А давайте-ка я пройдусь по родному ADO.NET провайдеру от Oracle, называемому ODP.NET. ODP.NET быстрее, но я делал высоконагруженный проект, где Майкросовстский провайдер прекрасно справлялся с потребностями ораклистов. ODP.NET функциональнее, однако кому-то этот функционал покажется пятой ногой с внутренней коленкой. ODP.NET глючнее и может очень дорого обойтись при переходе на другую версию Oracle. Мне кажется Oracle сам по себе далеко не так вкладывается в совместимость, как это делает Microsoft. Вот что я помню в ODP.NET: Когда Oracle возвращает число у которого после запятой где-то от 19 знаков точности, ODP.NET это не переварит и “порвет”. Также есть ядерные забабоны, когда ODP.NET от одной версии Oracle подключается к базе другой версии, например 10й или 11й ODP.NET подключается ...

Internal .Net Framework Data Provider error 30

Обычно эта ошибка связана с неправильным сопоставлением типов на стороне .NET Framework в System.Data.OracleClient классах или там же с превышением разрядности значения. Например принимется строка в 5 символов, а передается 10. Но сейсас первый раз столкнулся с отображением этой ошибки, когда неправильное приведение типов было в процедуре пакета Oracle. Не ожидал увидить сообщение .NET Framework из-за ошибки в Oracle. Это недоработка, конечно, в .NET Framework, но предупрежден, значит вооружен. Все лучше чем забабоны родного .NET провайдера от Oracle, по имени ODP.NET.