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

среда, 12 апреля 2017 г.

Привязка к ресурсам в зависимости от данных

Столкнулся с интересной задачей. Есть некоторая коллекция данных, которую надо отобразить в ItemsControl. У элементов данных есть два свойства: первое просто текст, а второе имя ресурса с картинкой которую необходимо показать. Т.е. в зависимости от данных в модели должен подгружаться тот или иной ресурс. Поискав решение быстро наткнулся на применение конвертора который ищет ресурс по имени следующим способом:

return Application.Current.FindResource(resourceName) as BitmapImage;

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

пятница, 23 декабря 2016 г.

Замена стандартной подсветки в TreeView

Пятница, голова уже не варит, максимум на что ее еще хватит написать ответ на очередной вопрос на форумах MSDN. Суть вопроса: нужно при выборе элемента в дереве не подсвечивать стандартное выделение всего TreeViewItem, а подсвечивать часть DataTemplate, который отвечает за показ элементов дерева. Т.е. сделать надо, чтобы выделение работало вот так, как на январе:

Интересно? Тогда идем под кат.

воскресенье, 27 декабря 2015 г.

Показ дочерних View в рамках патерна MVVM (часть 2)

Пару лет назад уже была статья "Показ дочерних View в рамках патерна MVVM", т.к. сейчас это делаем по другому, да и вопрос тут возник на тостере... Еще раз, в рамках паттерна предполагается что ViewModel (бизнес-логика) работает только с классами ViewModel и Model, а нам необходимо показать окно, т.е. кроме создания ViewModel для него, нужно создать еще и View. Как это сделать? Четвертый вариант под катом.

вторник, 15 сентября 2015 г.

Раскраска фона элементов ListBox через строчку

Как то всегда пользовался для отображения данных, в которых имеет смысл раскрашивать цвет фона через строчку DataGrid, а в нем все просто. Есть два замечательных свойства RowBackground и AlternatingRowBackground. Задаешь их и все работает. Если нужно на основе данных отображаемых в строках, то это тоже все просто, через Converter. А вот что делать, если через строчку надо раскрасить фон в ListBox?

вторник, 11 августа 2015 г.

Показ окна в отдельном потоке

Время от времени в приложении появляются "долгие операции" во время которых интерфейс тормозит и пользователь не понимает что происходит с приложением. Обычно такие операции выносятся в фоновый поток, а в основном потоке приложения показываем прогресс выполнения работы или некую анимацию дающую понять, что приложение не повисло. Но что делать, если работа выполняется в основном потоке и вынести ее в фоновый нельзя (например, идет чтение из визуальных компонентов)? Вот об этом и поговорим под катом.

среда, 8 июля 2015 г.

Подписаться на изменение DependecyProperty

Часто бывает, что есть некий потомок DependencyObject, у него есть DependencyProperty, а вот события сообщающего о том, что свойство изменилось нет. Я с такой ситуацией столкнулся при попытках отследить изменение актуальной ширины DataGridColumn. Ну и под катом, как это все можно провернуть.

пятница, 8 мая 2015 г.

Tooltip в виде выноски (Balloon)


Как оказалось делал зря, но прикольно, поэтому выложу, вдруг где еще пригодиться. Задача состоит в том, чтобы вывести ToolTip в виде выноски (балона-облачка).



четверг, 30 апреля 2015 г.

При показе из WinForms приложения WPF окна в его TextBox-ах не вводится текст

В проекте написанном на WinForms необходимо было показать форму WPF. Показывается, все замечательно. Но... При попытке что-то набрать в TextBox-е в нем отображаются только пробелы. Все остальные клавиши игнорируются. Ларчик открывался просто. При показе WPF окна надо вызывать не Show, а ShowDialog. Иначе ввод не работает. Вот как так, а?

воскресенье, 5 апреля 2015 г.

Работа с файлами Excel пользователем через интерфейс, на основе SpreadsheetGear

Возникла задача дать пользователю возможность ввести данные в приложении, но на основе шаблона загруженного из Excel файла. Или, иными словами, грузиться и показывается пользователю Excel файл. Файл заранее подготовлен и данные можно вводить только в определенные места (отличающиеся от файла к файлу). Стоит задача показать такой файл, выполнить с ним некоторые операции, ну и считать из него данные по завершению ввода.
данная статья сборник небольших примеров решения такой задачи с использование компонента SpreadsheetGear.

вторник, 25 ноября 2014 г.

Построение графов при помощи NodeXL

В связи с производственной необходимостью, возникла потребность в компоненте для построения графов. Сходу были найдены вот эти три проекта:
http://graphx.codeplex.com/
http://graphsharp.codeplex.com/
http://nodexl.codeplex.com/
Т.к. по картинкам мне больше понравился третий, то его и пробовал. Он оказался неплох. Поэтому под катом рассказ о том, как при помощи NodeXL строить графики в WPF приложениях.

понедельник, 27 октября 2014 г.

Создание объектов из XAML

Возник на форумах MSDN вопрос, как привязать команду к контекстному меню. У автора небольшое недопонимание Binding-а, но не суть. Предлагаю посмотреть, как можно создавать объекты их XAML и использовать их, например, как источники в Binding.

пятница, 3 октября 2014 г.

Ввод данных и их проверка на уровне Binding

Очередной вопрос на MSDN. Стоит задача при редактировании записи сначала проверить данные, а только потом применить изменения к объекту модели. Я всю конструкцию MVVM воспроизводить не буду и покажу на примере в котором будет только один объект модели, а все остальное будет в лоб. Начнем.

четверг, 27 февраля 2014 г.

Доступ к элементам расположенным внутри ControlTemplate

Очередной вопрос на форумах MSDN. Идея простая, есть некий ControlTemplate, который применяет к некоторому компоненту. В ControlTemplate-е лежат элементы к которым мы хотим получить доступ. Делается это не сложно, под катом пошаговый пример.

понедельник, 14 октября 2013 г.

AutomationProperties при тестировании пользовательского интерфейса

При использовании Microsoft Test Manager (MTM ) для тестирования пользовательского интерфейса есть два варианта ручное и автоматизированное тестирование. Автоматизированное, от ручного, отличается тем, что выполнив ручной тест, мы можем записать последовательность действий и запускать эту последовательность действий для выполнения регрессионного теста, или для проверки воспроизводится ошибка или нет. При записи, особенно когда идет выбор элемента в списке у MTM возникает проблема с идентификацией. Например, когда мы записывали тест, у нас сотрудник Иванов был третьим в списке, а сейчас, он второй. О том, как облегчить жизнь тестировщикам и улучшить определение элементов я сегодня и расскажу.

воскресенье, 29 сентября 2013 г.

Показ дочерних View в рамках патерна MVVM

Время от времени, участвую в обсуждениях, как правильно в рамках паттерна MVVM показывать дополнительные (дочерние View) в отдельных окнах. Т.е. когда смотришь на диаграмму иллюстрирующую паттерн, все ясно: View знает про ViewModel только на уровне имен свойств указанных в биндинге, ViewModel вообще ничего не знает про View. Но вот, пользователь нажимает на кнопку и нам надо создать новые View и ViewModel для того, чтобы показать это все в отдельном окне... Что делать? Вот об этом сегодня и пойдет речь.

воскресенье, 4 августа 2013 г.

Еще раз о шаблонах элементов

Я уже пару раз писал про шаблоны. Вот здесь, о том, как поменять внешний вид кнопки. А вот здесь, как в зависимости от свойств компонента можно подгружать разные шаблоны. Сегодня предлагаю посмотреть натягивание шаблонов на более сложный элемент управления, а именно на TreeView.

четверг, 18 апреля 2013 г.

Выделить элемент в дереве или развернуть его из кода

Сегодня статья будет не очень большая, но охватывать будет много всего.
1. Как из кода выбирать элемент в дереве (для тех кто не в курсе, у TreeView свойство SelectedItem доступно только для чтения).
2. Как получить информацию о том, что в некоторой ноде происходит сворачивание и разворачивание.
3. Посмотрим на паттерны "обертка" (декоратор) и на MVVM (что это за паттерн, можно почитать здесь).
4. Применение "ленивой" загрузки.
Интересно? Тогда начинаем.

воскресенье, 10 февраля 2013 г.

Проигрывание GIF-ок в WPF приложении

Классически, на форумах MSDN, в одном из топиков, задали фопрос, как в WPF приложении заставить gif-изображение показывать не только первый кадр, а всю анимацию. Ответ под катом.

понедельник, 28 января 2013 г.

О "всплывании" события изменения свойств

Итак, сегодня статья, опять навеяна форумами MSDN, а конкретно вот этим вопросом. Кто лениться ходить по ссылкам. Есть два класса, и один включается во второй. Если оба реализуют INotifyPropertyChanged, как сделать так, чтобы при измененнии свойств включенного класса, вызывалось событие изменения свойств класса включающего.

среда, 9 января 2013 г.