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

Так же, как закрепление вторичных плиток для начала, можно закрепить дополнительные плитки на панели задач, предоставляя пользователям быстрый доступ к содержимому в приложении.Just like pinning secondary tiles to Start, you can pin secondary tiles to the taskbar, giving your users quick access to content within your app.

Taskbar pinning

Важно!

API с ограниченным доступом: Этот API является функцией ограниченного доступа.Limited Access API: This API is a limited access feature. Чтобы использовать этот API, обратитесь по адресу taskbarsecondarytile@microsoft.com .To use this API, please contact taskbarsecondarytile@microsoft.com.

Требуется обновление за октябрь 2018: необходимо выбрать пакет SDK 17763 и запустить сборку 17763 или более позднюю версию для закрепления на панели задач.Requires October 2018 Update: You must target SDK 17763 and be running build 17763 or higher to pin to taskbar.

РуководствоGuidance

Вторичная плитка предоставляет пользователям единообразный и эффективный способ прямого доступа к конкретным областям внутри приложения.A secondary tile provides a consistent, efficient way for users to directly access specific areas within an app. Хотя пользователь выбирает, следует ли «закрепить» дополнительную плитку на панели задач, области также прикрепляемые в приложении определяются разработчиком.Although a user chooses whether or not to "pin" a secondary tile to the taskbar, the pinnable areas in an app are determined by the developer. Дополнительные рекомендации см. в руководстве по дополнительным плиткам.For more guidance, see Secondary tile guidance.

1. Определите, существует ли API, и разблокируйте ограниченный доступ.1. Determine if API exists and unlock Limited-Access

У старых устройств нет API-интерфейсов, закреплять панель задач (при использовании более ранних версий Windows 10).Older devices don't have the taskbar pinning APIs (if you're targeting older versions of Windows 10). Поэтому не следует отображать на этих устройствах кнопку закрепления, которая не поддерживает закрепление.Therefore, you shouldn't display a pin button on these devices that aren't capable of pinning.

Кроме того, эта функция заблокирована в ограниченном доступе.Additionally, this feature is locked under Limited-Access. Чтобы получить доступ, обратитесь в корпорацию Майкрософт.To gain access, contact Microsoft. Вызовы API в таскбарманажер. рекуестпинсекондаритилеасинк, таскбарманажер. иссекондаритилепиннедасинк и TaskbarManager. TryUnpinSecondaryTileAsync завершатся ошибкой с исключением "отказано в доступе".API calls to TaskbarManager.RequestPinSecondaryTileAsync, TaskbarManager.IsSecondaryTilePinnedAsync, and TaskbarManager.TryUnpinSecondaryTileAsync will fail with an Access Denied exception. Приложениям запрещено использовать этот API без разрешения, и определение API может измениться в любое время.Apps are not allowed to use this API without permission, and the API definition may change at any time.

Используйте метод апиинформатион. исмесодпресент , чтобы определить наличие API-интерфейсов.Use the ApiInformation.IsMethodPresent method to determine if the APIs are present. А затем используйте API лимитедакцессфеатурес , чтобы попытаться разблокировать API.And then use the LimitedAccessFeatures API to try unlocking the 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. получение экземпляра Таскбарманажер2. Get the TaskbarManager instance

Приложения Windows могут работать на различных устройствах. не все из них поддерживают панель задач.Windows apps can run on a wide variety of devices; not all of them support the taskbar. Сейчас ее поддерживают только настольные компьютеры.Right now, only Desktop devices support the taskbar. Кроме того, может возникнуть присутствие панели задач.Additionally, presence of the taskbar might come and go. Чтобы проверить, имеется ли в данный момент панель задач, вызовите метод таскбарманажер. методом по умолчанию и убедитесь, что возвращаемый экземпляр имеет значение, не равное NULL.To check whether taskbar is currently present, call the TaskbarManager.GetDefault method and check that the instance returned is not null. Не отображать кнопку с закреплениями, если панель задач отсутствует.Don't display a pin button if the taskbar isn't present.

Мы рекомендуем держать экземпляр на время выполнения одной операции, например закрепления, а затем заменяя новый экземпляр, в следующий раз, когда потребуется выполнить еще одну операцию.We recommend holding onto the instance for the duration of a single operation, like pinning, and then grabbing a new instance the next time you need to do another operation.

TaskbarManager taskbarManager = TaskbarManager.GetDefault();

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

3. Проверьте, закреплена ли плитка на панели задач3. Check whether your tile is currently pinned to the taskbar

Если плитка уже закреплена, вместо нее должна отобразиться кнопка "Открепить".If your tile is already pinned, you should display an unpin button instead. Вы можете использовать метод иссекондаритилепиннедасинк для проверки того, закреплена ли плитка в данный момент (пользователи могут открепить ее в любое время).You can use the IsSecondaryTilePinnedAsync method to check whether your tile is currently pinned (users can unpin it at any time). В этом методе вы передаете тилеид плитки, которую вы хотите закрепить.In this method, you pass the TileId of the tile you want to know is pinned.

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. Проверьте, разрешено ли закрепление4. Check whether pinning is allowed

Закрепление на панели задач можно отключить с помощью групповая политика.Pinning to the taskbar can be disabled by Group Policy. Свойство таскбарманажер. испиннингалловед позволяет проверить, разрешено ли закрепление.The TaskbarManager.IsPinningAllowed property lets you check whether pinning is allowed.

Когда пользователь нажимает кнопку "закрепить", следует проверить это свойство и, если оно ложно, появится диалоговое окно сообщения, информирующее пользователя о том, что закрепление не разрешено на этом компьютере.When the user clicks your pin button, you should check this property, and if it's false, you should display a message dialog informing the user that pinning is not allowed on this machine.

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. Создание и закрепление плитки5. Construct and pin your tile

Пользователь щелкнул кнопку закрепить, и вы определили, что у вас есть интерфейсы API, есть панель задач, а закрепление разрешено... время на закрепление!The user has clicked your pin button, and you've determined that the APIs are present, taskbar is present, and pinning is allowed... time to pin!

Во-первых, создайте вторичную плитку так же, как при закрепления для запуска.First, construct your secondary tile just like you would when pinning to Start. Дополнительные сведения о дополнительных свойствах плитки см. в статье Закрепление дополнительных плиток для запуска.You can learn more about the secondary tile properties by reading Pin secondary tiles to Start. Однако при закреплении на панели задач в дополнение к ранее необходимым свойствам также требуется Square44x44Logo (это логотип, используемый панелью задач).However, when pinning to taskbar, in addition to the previously required properties, Square44x44Logo (this is the logo used by taskbar) is also required. В противном случае будет создаваться исключение.Otherwise, an exception will be thrown.

Затем передайте плитку в метод рекуестпинсекондаритилеасинк .Then, pass the tile to the RequestPinSecondaryTileAsync method. Так как это ограниченный доступ, при этом не отображается диалоговое окно подтверждения и не требуется поток пользовательского интерфейса.Since this is under limited-access, this will not display a confirmation dialog and does not require a UI thread. Но в будущем, когда эта возможность открывается за пределами ограниченного доступа, вызывающие объекты, не использующие ограниченный доступ, получат диалоговое окно и должны использовать поток пользовательского интерфейса.But in the future when this is opened up beyond limited-access, callers not utilizing limited-access will receive a dialog and be required to use the UI thread.

// 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);

Этот метод возвращает логическое значение, указывающее, закреплена ли плитка на панели задач.This method returns a boolean value that indicates whether your tile is now pinned to the taskbar. Если плитка уже закреплена, метод обновляет существующую плитку и возвращает значение true.If your tile was already pinned, the method updates the existing tile and returns true. Если закрепление не разрешено или панель задач не поддерживается, метод возвращает значение false.If pinning wasn't allowed or taskbar isn't supported, the method returns false.

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

Чтобы просмотреть все созданные плитки, которые все еще закреплены в любом месте ("Пуск", "панель задач" или "оба"), используйте финдалласинк.To see all the tiles that you created and are still pinned somewhere (Start, taskbar, or both), use FindAllAsync. Затем можно проверить, закреплены ли эти плитки на панели задач и/или в начале.You can subsequently check whether these tiles are pinned to the taskbar and/or Start. Если поверхность не поддерживается, эти методы возвращают значение false.If the surface isn't supported, these methods return 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
    }
}

Обновление плиткиUpdate a tile

Чтобы обновить уже закрепленную плитку, можно использовать метод секондаритиле. UpdateAsync , как описано в разделе Обновление вторичной плитки.To update an already pinned tile, you can use the SecondaryTile.UpdateAsync method as described in Updating a secondary tile.

Открепить плиткуUnpin a tile

Приложение должно предоставить кнопку "Открепить", если плитка в данный момент закреплена.Your app should provide an unpin button if the tile is currently pinned. Чтобы открепить плитку, просто вызовите трюнпинсекондаритилеасинк, передав тилеид вспомогательной плитки, которую вы хотите отменить.To unpin the tile, simply call TryUnpinSecondaryTileAsync, passing in the TileId of the secondary tile you would like unpinned.

Этот метод возвращает логическое значение, указывающее, будет ли плитка перестает быть закрепленной на панели задач.This method returns a boolean value that indicates whether your tile is no longer pinned to the taskbar. Если плитка не была закреплена на первом месте, это также возвращает значение true.If your tile wasn't pinned in the first place, this also returns true. Если функция закрепления не разрешена, возвращается значение false.If unpinning wasn't allowed, this returns false.

Если плитка закреплена только на панели задач, это приведет к удалению плитки, так как она больше не закреплена в любом месте.If your tile was only pinned to taskbar, this will delete the tile since it is no longer pinned anywhere.

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

Удаление плиткиDelete a tile

Если вы хотите открепить плитку из любой области (Start, панель задач), используйте метод рекуестделетеасинк .If you want to unpin a tile from everywhere (Start, taskbar), use the RequestDeleteAsync method.

Это подходит для случаев, когда содержимое, которое пользователь закрепляет, больше не применяется.This is appropriate for cases where the content the user pinned is no longer applicable. Например, если приложение позволяет закрепить записную книжку для запуска и панели задач, после чего пользователь удаляет записную книжку, следует просто удалить плитку, связанную с записной книжкой.For example, if your app lets you pin a notebook to Start and taskbar, and then the user deletes the notebook, you should simply delete the tile associated with the notebook.

// 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();

Открепить только от началаUnpin only from Start

Если вы хотите открепить вторичную плитку от начала, оставляя ее на панели задач, можно вызвать метод стартскринманажер. триремовесекондаритилеасинк .If you only want to unpin a secondary tile from Start while leaving it on Taskbar, you can call the StartScreenManager.TryRemoveSecondaryTileAsync method. Таким образом, плитка будет удалена, если она больше не закреплена на других поверхностях.This will similarly delete the tile if it is no longer pinned to any other surfaces.

Этот метод возвращает логическое значение, указывающее, будет ли плитка больше не закреплена для запуска.This method returns a boolean value that indicates whether your tile is no longer pinned to Start. Если плитка не была закреплена на первом месте, это также возвращает значение true.If your tile wasn't pinned in the first place, this also returns true. Если функция unpinning не разрешена или не поддерживается, возвращается значение false.If unpinning wasn't allowed or Start isn't supported, this returns false.

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

РесурсыResources