Перейти к содержанию

Изменение местоположения стандартной плитки "Удалить"

Изменение местоположения стандартной плитки “Удалить”

Допустим, плитку “Удалить”, доступную для открытой карточки, требуется переместить из подгруппы “Другие” на верхний уровень боковой панели. Аналогично можно перемещать любые другие плитки, как добавленные в системе, так и настроенные в ваших расширениях.

Для этого надо написать расширение TileExtension и перегрузить метод InitializingLocal. В нём для всех карточек, кроме “Удалённая карточка”, плитка “Удалить” перемещается следующим образом: исходная плитка копируется deleteCard.Clone() и затем скрывается deleteCard.DisableWithCollapsing(). Плитка-копия размещается на верхнем уровне левой боковой панели.

public sealed class RelocateDeleteCardTileExtension : TileExtension { public override void InitializingLocal(ITileLocalExtensionContext context) { // игнорируем тип карточки "Удалённая карточка", в котором плитка "Удалить" уже перемещена ITilePanel panel = context.Workspace.LeftPanel; ICardModel model; ICardEditorModel editor = panel.Context.CardEditor; if (editor == null || (model = editor.CardModel) == null || model.CardType.ID == CardHelper.DeletedTypeID) { return; }

// получаем плитку "Другие" ITile cardOthers = panel.Tiles.TryGet(TileNames.CardOthers); if (cardOthers != null) { // в ней плитка "Удалить" ITile deleteCard = cardOthers.Tiles.TryGet(TileNames.DeleteCard); if (deleteCard != null) { // клонируем её, а старую плитку "отключаем" ITile clone = deleteCard.Clone(); deleteCard.DisableWithCollapsing();

// плитка будет в нижней части панели над плитками "Системные" и "Другие" clone.VerticalAlignment = TileVerticalAlignment.Bottom; clone.Order = -1; panel.Tiles.Add(clone);

// добавляем тот же хоткей для удаления clone.Context.AddInputBinding(clone, TileKeys.DeleteCard); } } } }

Расширение должно быть зарегистрировано на этапе ExtensionStage.AfterPlatform, т.е. после того, как выполнены платформенные расширения, затрагивающие плитку “Удалить”.

[Registrator] public sealed class Registrator : RegistratorBase { public override void RegisterExtensions(IExtensionContainer extensionContainer) { extensionContainer .RegisterExtension<ITileLocalExtension, RelocateDeleteCardTileExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 1) .WithSingleton()) ; } }

Back to top