Закрепление вспомогательных плиток на панели задач

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

Закрепление на панели задач

Важно!

API ограниченного доступа. Этот API является функцией ограниченного доступа. Чтобы использовать этот API, обратитесь в .taskbarsecondarytile@microsoft.com

Требуется обновление за октябрь 2018 г. Для закрепления на панели задач необходимо установить пакет SDK 17763 и выполнять сборку 17763 или более позднюю версию.

Руководство

Вторичная плитка обеспечивает согласованный и эффективный способ прямого доступа пользователей к определенным областям в приложении. Хотя пользователь выбирает, следует ли "закреплять" вспомогательную плитку на панели задач, закрепляемые области в приложении определяются разработчиком. Дополнительные сведения см. в разделе Руководство по дополнительным плиткам.

1. Определите, существует ли API, и разблокируйте Limited-Access

На более старых устройствах нет API-интерфейсов для закрепления панели задач (если вы используете более старые версии Windows 10). Поэтому не следует отображать кнопку закрепления на этих устройствах, которые не могут закреплять.

Кроме того, эта функция заблокирована в разделе Ограниченный доступ. Чтобы получить доступ, обратитесь в корпорацию Майкрософт. Вызовы API TaskbarManager.RequestPinSecondaryTileAsync, TaskbarManager.IsSecondaryTilePinnedAsync и TaskbarManager.TryUnpinSecondaryTileAsync завершаются сбоем с исключением Access Denied. Приложения не могут использовать этот API без разрешения, и определение API может измениться в любое время.

Используйте метод ApiInformation.IsMethodPresent , чтобы определить наличие API. Затем используйте API LimitedAccessFeatures , чтобы попытаться разблокировать API.

if (ApiInformation.IsMethodPresent("Windows.UI.Shell.TaskbarManager", "RequestPinSecondaryTileAsync"))
{
    // API present!
    // Unlock the pin to taskbar feature
    var result = LimitedAccessFeatures.TryUnlockFeature(
        "com.microsoft.windows.secondarytilemanagement",
        "<tokenFromMicrosoft>",
        "<publisher> has registered their use of com.microsoft.windows.secondarytilemanagement with Microsoft and agrees to the terms of use.");

    // If unlock succeeded
    if ((result.Status == LimitedAccessFeatureStatus.Available) ||
        (result.Status == LimitedAccessFeatureStatus.AvailableWithoutToken))
    {
        // Continue
    }
    else
    {
        // Don't show pin to taskbar button or call any of the below APIs
    }
}

else
{
    // Don't show pin to taskbar button or call any of the below APIs
}

2. Получение экземпляра TaskbarManager

Приложения для Windows могут работать на самых разных устройствах; не все из них поддерживают панель задач. Сейчас ее поддерживают только настольные компьютеры. Кроме того, может появиться панель задач. Чтобы проверка, присутствует ли панель задач в данный момент, вызовите метод TaskbarManager.GetDefault и проверка, что возвращенный экземпляр не имеет значения NULL. Не отображайте кнопку закрепления, если панель задач отсутствует.

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

TaskbarManager taskbarManager = TaskbarManager.GetDefault();

if (taskbarManager != null)
{
    // Continue
}
else
{
    // Taskbar not present, don't display a pin button
}

3. Проверьте, закреплена ли плитка на панели задач

Если плитка уже закреплена, следует отобразить кнопку открепить. Вы можете использовать метод IsSecondaryTilePinnedAsync, чтобы проверка, закреплена ли плитка в данный момент (пользователи могут открепить ее в любое время). В этом методе передается tileId плитки, о которой вы хотите знать, закреплена.

if (await taskbarManager.IsSecondaryTilePinnedAsync("myTileId"))
{
	// The tile is already pinned. Display the unpin button.
}

else 
{
	// The tile is not pinned. Display the pin button.
}

4. Проверьте, разрешено ли закрепление

Закрепление на панели задач можно отключить с помощью групповая политика. Свойство TaskbarManager.IsPinningAllowed позволяет проверка, разрешено ли закрепление.

Когда пользователь нажимает кнопку закрепления, необходимо проверка это свойство, а если значение false, отобразится диалоговое окно с сообщением о том, что закрепление запрещено на этом компьютере.

TaskbarManager taskbarManager = TaskbarManager.GetDefault();
if (taskbarManager == null)
{
    // Display message dialog informing user that taskbar is no longer present, and then hide the button
}

else if (taskbarManager.IsPinningAllowed == false)
{
    // Display message dialog informing user pinning is not allowed on this machine
}

else
{
    // Continue pinning
}

5. Создание и закрепление плитки

Пользователь нажал кнопку закрепления, и вы определили, что API присутствуют, панель задач присутствует и закрепление разрешено... время закрепить!

Во-первых, создайте вспомогательную плитку так же, как при закреплении на начальном экране. Дополнительные сведения о свойствах вторичной плитки см. в статье Закрепление дополнительных плиток на начальном экране. Однако при закреплении на панели задач в дополнение к ранее необходимым свойствам также требуется Square44x44Logo (это логотип, используемый на панели задач). В противном случае будет создаваться исключение.

Затем передайте плитку в метод RequestPinSecondaryTileAsync . Так как доступ ограничен, диалоговое окно подтверждения не отображается и поток пользовательского интерфейса не требуется. Но в будущем, когда он будет открыт за пределами ограниченного доступа, вызывающие абоненты, не использующие ограниченный доступ, получат диалоговое окно и будут обязаны использовать поток пользовательского интерфейса.

// Initialize the tile (all properties below are required)
SecondaryTile tile = new SecondaryTile("myTileId");
tile.DisplayName = "PowerPoint 2016 (Remote)";
tile.Arguments = "app=powerpoint";
tile.VisualElements.Square44x44Logo = new Uri("ms-appdata:///AppIcons/PowerPoint_Square44x44Logo.png");
tile.VisualElements.Square150x150Logo = new Uri("ms-appdata:///AppIcons/PowerPoint_Square150x150Logo.png");

// Pin it to the taskbar
bool isPinned = await taskbarManager.RequestPinSecondaryTileAsync(tile);

Этот метод возвращает логическое значение, указывающее, закреплена ли плитка на панели задач. Если плитка уже закреплена, метод обновляет существующую плитку и возвращает значение true. Если закрепление не разрешено или панель задач не поддерживается, метод возвращает значение false.

Перечисление плиток

Чтобы просмотреть все созданные и закрепленные плитки (пуск, панель задач или и то, и другое), используйте FindAllAsync. Впоследствии можно проверка, закреплены ли эти плитки на панели задач или на начальном экране. Если surface не поддерживается, эти методы возвращают значение false.

var taskbarManager = TaskbarManager.GetDefault();
var startScreenManager = StartScreenManager.GetDefault();

// Look through all tiles
foreach (SecondaryTile tile in await SecondaryTile.FindAllAsync())
{
    if (taskbarManager != null && await taskbarManager.IsSecondaryTilePinnedAsync(tile.TileId))
    {
        // Tile is pinned to the taskbar
    }

    if (startScreenManager != null && await startScreenManager.ContainsSecondaryTileAsync(tile.TileId))
    {
        // Tile is pinned to Start
    }
}

Обновление плитки

Чтобы обновить уже закрепленную плитку, можно использовать метод SecondaryTile.UpdateAsync , как описано в разделе Обновление вторичной плитки.

Открепить плитку

Если плитка закреплена, приложение должно предоставить кнопку открепить. Чтобы открепить плитку, просто вызовите TryUnpinSecondaryTileAsync, передав tileId дополнительной плитки, открепив ее.

Этот метод возвращает логическое значение, указывающее, не закреплена ли плитка на панели задач. Если плитка не была закреплена, это также возвращает значение true. Если открепление запрещено, возвращается значение false.

Если плитка была закреплена только на панели задач, плитка будет удалена, так как она больше не закреплена.

var taskbarManager = TaskbarManager.GetDefault();
if (taskbarManager != null)
{
    bool isUnpinned = await taskbarManager.TryUnpinSecondaryTileAsync("myTileId");
}

Удаление плитки

Если вы хотите открепить плитку отовсюду (пуск, панель задач), используйте метод RequestDeleteAsync .

Это подходит для случаев, когда закрепленное пользователем содержимое больше не применимо. Например, если приложение позволяет закрепить записную книжку на начальном экране и панели задач, а затем пользователь удалит записную книжку, следует просто удалить плитку, связанную с записной книжкой.

// Initialize a secondary tile with the same tile ID you want removed.
// Or, locate it with FindAllAsync()
SecondaryTile toBeDeleted = new SecondaryTile(tileId);

// And then delete the tile
await toBeDeleted.RequestDeleteAsync();

Открепить только на начальном экране

Если вы хотите открепить вспомогательную плитку от начального экрана, оставив ее на панели задач, можно вызвать метод StartScreenManager.TryRemoveSecondaryTileAsync . Аналогичным образом будет удалена плитка, если она больше не закреплена на других поверхностях.

Этот метод возвращает логическое значение, указывающее, не закреплена ли плитка на начальном экране. Если плитка не была закреплена, это также возвращает значение true. Если открепить не разрешено или запустить не поддерживается, возвращается значение false.

await StartScreenManager.GetDefault().TryRemoveSecondaryTileAsync("myTileId");

Ресурсы