background preloader

WPF only

Facebook Twitter

.NET компонент — Tree View с поиском. Когда к TreeView потребовалось сделать поиск, я сделал реализацию поиска вне контрола, а потом установил его свойство SelectedItem.

.NET компонент — Tree View с поиском

К сожалению у стандартного WPF контрола TreeView свойство SelectedItem только для чтения. Поэтому мне пришлось ввести в каждый объект отображенный в TreeView свойства IsSelected и IsExpanded и связать эти свойства с соответствующим свойством TreeViewItem. (обычно именно это советуют в инете ) Таким образом нужно только установить у нужного объекта IsSelected, а у всех его предков IsExpanded. Такая реализация работает прекрасно, но… Не очень красиво иметь бизнес объекту IsSelected и IsExpanded.

А создавать вью модель для каждого пункта дерева муторно. В общем поразмыслив немного пришел к такой концепции. Поиск в объекта осуществлять по части строкового представления объекта в узле дерева. Вот так я осуществил поиск во всех шаблонах. Вот так выглядит поиск всех элементов содержащих искомый текст. Регистрация глобальных «хоткеев» при использовании WPF. Возможно, вы когда-то очень хотели чтобы в вашем приложении присутствовала возможность управления чем-либо через глобальные клавиши.

Регистрация глобальных «хоткеев» при использовании WPF

И, возможно, вам нравится программировать с использованием технологии WPF. Тогда этот топик для вас. Для решения проблемы стоит уяснить как работает механизм горячих клавиш в Windows, поскольку методы WPF, работающие с ними напрямую, отсутствуют. Поэтому нам понадобится обращаться к WinAPI. Нам понадобятся приведённые ниже функции. Регистрация хоткея: BOOL WINAPI RegisterHotKey( __in_opt HWND hWnd, __in int id, __in UINT fsModifiers, __in UINT vk ); Удаление хоткея: BOOL WINAPI UnregisterHotKey( __in_opt HWND hWnd, __in int id ); Регистрация уникальной строки для идентификации хоткея и получение её идентификатора (атома): ATOM GlobalAddAtom( LPCTSTR lpString ); И, соответственно, удаление атома: ATOM WINAPI GlobalDeleteAtom( __in ATOM nAtom ) В С# экспортируем эти функции из соответствующих dll: Тут появляется одна небольшая проблема — обработка вызовов WndProc.

Относительно позиционированные элементы в документах WPF / .NET. Пару месяцев назад мне пришлось реализовывать интерфейс с помощью WPF.

Относительно позиционированные элементы в документах WPF / .NET

В основном использовался FlowDocument, т.к. необходимо было максимально близко организовать UI в стиле веб-страниц. Привыкший к свободе по позиционированию HTML-элементов с помощью CSS, я не мог найти решение по относительному позиционированию вложенных элементов. Свойства Top, Left, Right, Bottom полностью отсутствуют в плавающих WPF документах. MSDN выдал только класс Figure. Однако HorizontalOffset и VerticalOffset не работают при использовании FlowDocumentScrollViewer.

Как работают браузерные движки Наиболее интересной информацией о своей внутренней реализации предоставляет WebKit. Особый интерес вызвал цикл постов о WebCore Rendering. Вооружившись данным «постулатом», я решил найти что-либо похожее в недрах WPF. TextEffect Если для UIElement мы обычно используем RenderTrasform и 2D-трансформации вида Translate, Rotate и Scale, тот же механизм предусмотрен для объектов содержащих текст. Применим эффект: WPF Applications Deployment: объединение .NET сборок в одном исполняемом файле. Когда требуется объединить несколько управляемых сборок в одном файле, можно воспользоваться утилитой ILMerge: ILMerge.exe /t:winexe /out:test.exe test1.exe test2.dll В данном примере из двух сборок будет создан объединённый исполняемый файл.

WPF Applications Deployment: объединение .NET сборок в одном исполняемом файле

Атрибут /t:winexe указывает на то, что результатом будет оконное (WinForms) приложение. Однако, с приложениями WPF утилита ILMerge работать не умеет. Это связано с особенностями компиляции XAML-файлов, использующихся в архитектуре WPF для декларативного описания структуры, поведения и анимации пользовательского интерфейса: XAML-файл компилируется в BAML-код (аналог IL), который затем размещается в ресурсах сборки.С помощью объявлений пространства имён XML XAML-файл может ссылаться на другие сборки.XAML-файлы могут ссылаться друг на друга используя, к примеру, такие элементы, как объединённые словари ресурсов и фреймы.

К счастью есть другой способ: разместить файлы сборок внутри объединённой в качестве встроенных ресурсов. Например вот так: Резюме.