#731 – Основная идея Multi-Touch

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

Мультитач обычно используется для отслеживания жестов пользователя с использованием более одного пальца. Например, поместите два пальца на экран и разведите их в стороны, что будет интерпретировано как жест "zoom in" (увеличение). Движение двух пальцев друг к другу будет интерпретировано как жест "zoom out" (уменьшение). А поворот пальцев двух пальцев на экране одновременно будет интерпретировано как жест "rotate" (поворот).

Читать полностью »

10.01.2013

#713 Установка курсора в виде изображения из UIElement при перетаскивании

Вы можете использовать GiveFeedback для изменения курсора во время операции drag-and-drop. Вы можете пойти немного дальше и установить в качестве курсора картинку представляющую собой пользовательский элемент, который вы тащите, отобразив UIElement как картинку (bitmap) и потом конвертировав эту картинку в курсор.

Этот пример основан на коде написанном Brandon Cannaday, http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-custom-cursors. Для начал здесь приводится код Brandon измененный читателем "Swythan":

Читать полностью »

17.12.2012

#712 – Показ пользовательского курсора мыши при перетаскивании

Вы можете использовать свой курсор во время операции drag-and-drop установив обработчик на событие GiveFeedback.

В примере ниже мы загружаем пользовательский курсор из файла .cur расположенного в директории запуска приложения.

Читать полностью »

14.12.2012

#711 – Изменение курсора мыши во время перетаскивания

Вы можете изменять курсор мыши в процессе операции drag-and-drop обрабатывая событие GiveFeedback для drag источника. Свойство GiveFeedbackEventArgs.Effects показывает текущее действие в зависимости от позиции мыши. Вы можете установить курсор мыши, основываясь на текущем действии.

В примере ниже, мы меняем курсор мыши с "hand" для типа действия Copy, которые показывает разрешение для бросания данных.

Читать полностью »

13.12.2012

#707 – Перетаскивание списка элементов из приложения WPF в Excel

Вы можете перетаскивать данные из WPF в виде списка значений разделенных запятыми в Excel. Когда вы перетащили список CSV в Excel, то каждый элемент будет вставлен в отдельную ячейку.

В примере ниже мы имеем список элементов в контроле ListBox.

Мы можем перетаскивать элементы списка, подписавшись на событие MouseLeftButtonDown для элемента с надписью с голубым фоном. Мы создаем строку, содержащую элементы списка, разделенные запятой. Затем мы создаем DataObject с типом формата CommaSeparatedValue.

Читать полностью »

07.12.2012

#706 – Перетаскивание элементов пользовательского интерфейса между приложениями

Вы можете перетаскивать интерфейсы пользовательского интерфейса между приложениями WPF используя drag and drop. Для того чтобы это сделать надо прочитать XAML представление из логического дерева для части которую вы хотите перетащить и указать XAML как формат данных.

Пример ниже показывает, как перетащить StackPanel и все что в ней из одного приложения в другое.

На отправляющей стороне XamlWriter объект сохраняет XAML представление в виде строки.

Читать полностью »

06.12.2012

#616 – Порядок возникновения события Initialized и Loaded для FrameworkElement

У всех элементов, которые наследуются (прямо или косвенно) от FrameworkElement возникают оба события Initialized и Loaded когда контрол загружается. Например, оба события Initialized и Loaded возникают для каждого контрола в вашем приложении, когда приложение загружается.

События Initialized, для всех контролов, возникают, начиная с низа логического дерева. Когда вы перехватываете событие Initialize для определенного элемента, то вы можете считать, что любой нижележащий элемент уже инициализирован.

Событие Loaded наоборот возникает с вершины логического дерева и распространяется вниз. События Loaded начинают возникать только после того как системный layout определил позицию и размер для каждого элемента в дереве. Так что в обработчике события Loaded вы можете считать, что все элементы в логическом дереве полностью настроены.

Оригинал: #616 – FrameworkElement.Initialized and Loaded Event Order

02.08.2012

#615 – Стандартные события жизненного цикла объекта FrameworkElement

Все объекты в WPF, которые наследуются от FrameworkElement или FrameworkContentElement имеют три основных события которые возникают в течении жизненного цикла элемента. Так как эти события наследуются от FrameworkElement или FrameworkContentElement, они доступны для всех контролов, layout панелей, объектов Window и объектов Page.

Три главных события жизненного цикла объекта:

  • Initialized – Возникает, когда объект был создан и все свойства установлены. Свойства, относящиеся к layout еще не были установлены
  • Loaded – Возникает после того как системный layout рассчитал все свойства относящиеся layout. Привязка данных уже случилась к этому моменту, поэтому контрол получил свои последние значения свойств.
  • Unloaded – Возникает, когда элемент удаляется из логического дерева. Не возникает при закрытии приложения.

Оригинал: #615 – Standard Object Lifetime Events for FrameworkElement Objects

01.08.2012

Caliburn Micro Часть 4: Агрегатор событий

Для тех из вас, кто только присоединился к серии уроков, мы узнали о том, как использовать Caliburn Micro для создания приложений WPF с архитектурой MVVM. Caliburn Micro является фрейморком используемым для построения .NET приложений (WPF, Silverlight и Windows Phone 7) используя некоторые популярные UI паттерны, включая MVVM, MVP и MVC. Он предоставляет много полезных способов уменьшить объем работы, которые вам нужно сделать для выполнения общих задач, таких как создание привязок данных и перехват событий. Различные особенности Caliburn Micro позволяют легко иметь чистую связь между объектами модели и пользовательского интерфейса. Это означает, что ваше приложение легко тестируется и поддерживается. Вот ссылки на предыдущие статьи в блоге:

Читать полностью »

01.02.2012

Caliburn Micro Часть 3: Дополнительно о событиях и их параметрах

До текущего момента в серии примеров по Caliburn Micro мы рассмотрели как начать использовать Caliburn Micro в WPF приложении и как связать представление? с моделью вместе используя привязку и события. В сегодняшнем примере мы рассмотрим более продвинутые возможности обработки событий и указание параметров события. Для эксперимента с этими возможностями мы расширим приложение, сделанное в предыдущих статьях.

Возможно, вы помните по предыдущим статьям, что мы привязывались к событиям с помощью соглашений именования Caliburn Micro. Все что нам надо было это задать имя кнопки в представлении таким же, как и имя метода в модели представления. Когда событие Click происходило для кнопки, то это автоматически связывало его с вызовом соответствующего метода. Иногда вам нужно однозначно привязаться к событию для передачи параметров или указать какое точно событие вы хотите использовать. Для этого Caliburn Micro предоставляет расширенный и короткий синтаксис. Преимущество расширенного синтаксиса в совместимости с Microsoft Expression Blend. Короткий синтаксис лучше, если вам не нужно использовать дизайнер и вы хотите краткости и простоты. Давайте начнем с изучения как использовать расширенный синтаксис.

Читать полностью »

24.01.2012

Caliburn Micro Часть 2: Привязка данных и события

В моей предыдущей статье я показал вам как начать использовать Caliburn Micro Framework в приложениях WPF. Caliburn Micro помогает реализовать приложения используя MVVM паттерн дизайна, чтобы получить четкое разделение между представлением и моделью данных. В этой статье мы рассмотрим, как Caliburn Micro помогает нам с привязкой данных и событиями. Мы построим в итоге приложение, проиллюстрированное в прошлой статье и с добавлением некоторого простого взаимодействия с пользователем и отображением данных.

Привязка данных

Мы начнем с приложения отображающего значения цифр, которые хранятся в модели. В классе AppViewModel, созданном в предыдущей статье, добавим свойство с названием Count, как показано во фрагменте кода ниже. Значение свойства хранится в поле _count которому мы присвоим значение по умолчанию равное 50. Как вы можете помнить с прошлого раза мы сделали класс AppViewModel наследником PropertyChangedBase, который предоставлен Caliburn Micro для уведомления о изменившихся свойствах. Вместо реализации INotifyPropertyChanged в каждой модели, вы можете просто вызвать метод NotifyOfPropertyChange внутри сеттера вашего свойства.

Читать полностью »

16.01.2012