Добавление иконки-тега для файлов карточки
Добавление иконки-тега для файлов карточки¶
Для выбранных файлов в карточке средствами клиентского API можно добавить иконки, окрашенные в разные цвета, которые позволяют дополнительно различить файлы по произвольным признакам. Например, можно отметить иконками файлы с расширением PDF или файлы размером 100 Мб и более.
Note
Расширения на теги для файлов карточки доступны, начиная со сборки 2.4.
Рассмотрим пример, в котором для всех существующих и добавляемых файлов устанавливается одна и та же иконка. В методе SetTag можно поменять логику задания иконок в зависимости от свойств файла.
using System.Linq;
using System.Windows.Media;
using Tessa.Themes;
using Tessa.UI;
using Tessa.UI.Cards;
using Tessa.UI.Cards.Controls;
using Tessa.UI.Files;
namespace Tessa.Extensions.Client
{
public sealed class FileIconUIExtension :
CardUIExtension
{
public override void Initialized(ICardUIExtensionContext context)
{
IIconContainer icons = context.Icons;
// для каждого файлового контрола
foreach (IFileControl fileControl
in context.Model.ControlBag.OfType<FileListViewModel>().Select(x => x.FileControl))
{
// существующие файлы на момент открытия карточки
foreach (IFileViewModel fileViewModel in fileControl.Items)
{
SetTag(fileViewModel, icons);
}
// файлы, добавленные пользователем, пока карточка была открыта
fileControl.Items.CollectionChanged += (s, e) =>
{
if (e.NewItems != null)
{
foreach (IFileViewModel fileViewModel in e.NewItems)
{
SetTag(fileViewModel, icons);
}
}
};
}
}
private static void SetTag(IFileViewModel fileViewModel, IIconContainer icons)
{
Color background = ThemeManager.Current.Theme.GetColor(ThemeProperty.FileCurrentTaskTagBackground);
fileViewModel.Tag = new FileTagViewModel("Thin15", icons, background);
}
}
[Registrator]
public sealed class FileIconRegistrator : RegistratorBase
{
public override void InitializeExtensions(IExtensionContainer extensionContainer)
{
extensionContainer
.RegisterExtension<ICardUIExtension, FileIconUIExtension>(x => x
.WithOrder(ExtensionStage.AfterPlatform, 1)
.WithSingleton())
;
}
}
}