Изменение цвета фона в заданиях и сообщениях форумов
Изменение цвета фона в заданиях и сообщениях форумов¶
Цвет фона для заданий можно указывать на сервере или на клиенте в расширениях CardGetExtension
, используя свойства CardTask.Background
в списке заданий card.Tasks
. Однако, может быть необходимо динамически изменить цвет на клиенте в CardUIExtension
в зависимости от любых условий.
Ниже приведён пример расширения, которое применяется в платформе для окраски заданий в цвета, указанные в диалоге “Мои задания”, для функциональных ролей “Автор” и “Исполнитель”, а также для окраски сообщений форумов.
Tip
Расширение уже присутствует в платформе с версии 3.4.0
, не добавляйте его в свой проект расширений один-в-один. Используйте в качестве примера, как сделать окраску заданий или сообщений форумов по аналогии, для добавленных в проекте функциональных ролей.
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Windows.Media;
using Tessa.Cards;
using Tessa.Themes;
using Tessa.UI;
using Tessa.UI.Cards;
using Tessa.UI.Cards.Forums;
using Tessa.UI.Cards.Tasks;
namespace Tessa.Extensions.Platform.Client.UI
{
public sealed class PersonalizationUIExtension : CardUIExtension
{
public PersonalizationUIExtension(IUserSettings userSettings)
{
this.userSettings = userSettings;
}
private readonly IUserSettings userSettings;
public override Task Initialized(ICardUIExtensionContext context)
{
ICardModel model = context.Model;
if (model.CardType.Flags.HasNot(CardTypeFlags.AllowTasks))
{
return Task.CompletedTask;
}
Color? topicItemColor = this.userSettings.TopicItemColor;
ObservableCollection<ITaskItemViewModel> taskItems;
if (topicItemColor.HasValue
&& (taskItems = model.TryGetTaskItems()) != null)
{
foreach (ITaskItemViewModel taskItem in taskItems)
{
if (taskItem is TopicItemViewModel topicItem)
{
topicItem.ThemeBackground = topicItemColor.Value;
}
}
}
return model.ModifyTasksAsync(
(task, m) =>
{
CardTaskFlags flags = task.TaskModel.CardTask.Flags;
task.ThemeBackground =
flags.Has(CardTaskFlags.PerformerDeputy)
? this.userSettings.GetTaskColors(CardFunctionRoles.PerformerID).DeputyColor
?? ThemeManager.Current.Theme.GetColor(ThemeProperty.TaskPerformerDeputyBackground)
: flags.Has(CardTaskFlags.Performer)
? this.userSettings.GetTaskColors(CardFunctionRoles.PerformerID).NormalColor
?? ThemeManager.Current.Theme.GetColor(ThemeProperty.TaskPerformerBackground)
: flags.Has(CardTaskFlags.AuthorDeputy)
? this.userSettings.GetTaskColors(CardFunctionRoles.AuthorID).DeputyColor
?? ThemeManager.Current.Theme.GetColor(ThemeProperty.TaskAuthorDeputyBackground)
: flags.Has(CardTaskFlags.Author)
? this.userSettings.GetTaskColors(CardFunctionRoles.AuthorID).NormalColor
?? ThemeManager.Current.Theme.GetColor(ThemeProperty.TaskAuthorBackground)
: this.userSettings.TaskColor;
return Task.CompletedTask;
});
}
}
}