Тэги

Silverlight (36) WPF (10) IIS (7) Visual Studio (7) SharePoint (6) .Net Framework (5) ODP.NET (5) ASP.NET (4) C# (4) common (4) Network Settings (3) JavaScript (2) MS Office (2) Resharper (2) WCF (2) WEB (2) XPath (2) XSLT (2) ADO.NET (1) APEX (1) CMD (1) CSS (1) EF (1) HTML (1) Hardware bugs (1) Java (1) MS SQL (1) Oracle (1) PDF (1) Version Control (1) XAML (1)

вторник, 2 марта 2010 г.

Silverlight: TreeView Multi Selection and Multi Drag & Drop.



Silverlight 3.0, TreeView from Toolkit October 2009.
Tags: TreeView MultiSelection and Multi Drag & Drop.

Yes! We do it! :)

Изменено: v.1.2.

Задача: Сделать чтоб в TreeView можно было выбирать мнгого элементов. Также обеспечить для выбранных элементов множественный Drag And Drop.

Решение: Реализовать множественный выбор и Drag Drop в TreeView можно через низлежащий объект данных. А точноее через иерархию этих объектов. Нужно, также, реагировать на нажатие клавиш Контрол и Шифт.
На самом деле, если вы захотите польностью подражать поведению проводника Windows, к примеру, то вам понадобится еще много чего сделать и поковыряться в событийной модели Silverlight. Например определить, когда приложение Silverlight активно, а когда фокус находится в другом окне.

Код я не выкладываю, т.к. это написано для одного приложения. Не могу сейчас тратить время на вынос в красивый самостоятельный функционал, т.к. используется много другого разработанного функционала, например отложенное выделение / развертывание нод в TreeView. Также, я надеюсь, что это появиться в Silverlight 4 или каком-то из последующих Toolkit.

Изначально нужно создать объект данных со свойством IsSelectedLogicaly, например. Настройте стили в разметке XAML (ну или в файле кода) которые будут реагировать на это свойство.

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

Запрограммируйте дополнительно TreeView, чтоб по клику на +/- свойство IsSelectedLogicaly не менялось.

И это не все. Чтоб это работало как часы вместе с Drag & Drop нужно еще, к сожалению, учесть много мелочей.
Например, по аналогии с проводником Windows, мне пришлось определять и реагировать на состояние, когда приложение / окно Silverlight перестает быть активным. Отлавливать попытку всатвки родителя в потомка (это уже было реализовано в виде "игнорирования", но только для единичного выделения).

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

Подробности, если случиться, вы найдете в решении "MTC - Анализатор Счета", меню "Абоненты" от компании iFlex.ru.

Комментариев нет:

Отправить комментарий