Anclar iconos secundarios a la barra de tareasPin secondary tiles to taskbar

Al igual que anclar iconos secundarios al inicio, puede anclar iconos secundarios a la barra de tareas, lo que permite a los usuarios acceder rápidamente al contenido dentro de la aplicación.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

Importante

API de acceso limitado: esta API es una característica de acceso limitado.Limited Access API: This API is a limited access feature. Para usar esta API, póngase en contacto con taskbarsecondarytile@microsoft.com .To use this API, please contact taskbarsecondarytile@microsoft.com.

Requiere la actualización de octubre de 2018: debe tener como destino el SDK 17763 y ejecutar la compilación 17763 o superior para anclar a la barra de tareas.Requires October 2018 Update: You must target SDK 17763 and be running build 17763 or higher to pin to taskbar.

GuíaGuidance

Un icono secundario proporciona una forma coherente y eficaz de que los usuarios accedan directamente a áreas específicas de una aplicación.A secondary tile provides a consistent, efficient way for users to directly access specific areas within an app. Aunque un usuario elige si "anclar" un icono secundario a la barra de tareas, el desarrollador determina las áreas ancladas de una aplicación.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. Para obtener más información, consulte la Guía de iconos secundarios.For more guidance, see Secondary tile guidance.

1. determinar si existe la API y desbloquear el acceso limitado1. Determine if API exists and unlock Limited-Access

Los dispositivos más antiguos no tienen las API de anclaje de la barra de tareas (si tiene como destino versiones anteriores de Windows 10).Older devices don't have the taskbar pinning APIs (if you're targeting older versions of Windows 10). Por lo tanto, no debe mostrar un botón de anclaje en estos dispositivos que no sean capaces de anclar.Therefore, you shouldn't display a pin button on these devices that aren't capable of pinning.

Además, esta característica está bloqueada con acceso limitado.Additionally, this feature is locked under Limited-Access. Para obtener acceso, póngase en contacto con Microsoft.To gain access, contact Microsoft. Las llamadas API a TaskbarManager. RequestPinSecondaryTileAsync, TaskbarManager. IsSecondaryTilePinnedAsync y TaskbarManager. TryUnpinSecondaryTileAsync producirán un error con una excepción de acceso denegado.API calls to TaskbarManager.RequestPinSecondaryTileAsync, TaskbarManager.IsSecondaryTilePinnedAsync, and TaskbarManager.TryUnpinSecondaryTileAsync will fail with an Access Denied exception. Las aplicaciones no pueden usar esta API sin permiso y la definición de la API puede cambiar en cualquier momento.Apps are not allowed to use this API without permission, and the API definition may change at any time.

Use el método ApiInformation. IsMethodPresent para determinar si las API están presentes.Use the ApiInformation.IsMethodPresent method to determine if the APIs are present. Y, a continuación, use la API LimitedAccessFeatures para probar el desbloqueo de la 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. obtener la instancia de TaskbarManager2. Get the TaskbarManager instance

Las aplicaciones de Windows se pueden ejecutar en una amplia variedad de dispositivos. no todas ellas admiten la barra de tareas.Windows apps can run on a wide variety of devices; not all of them support the taskbar. En este momento, solo los dispositivos de escritorio admiten la barra de tareas.Right now, only Desktop devices support the taskbar. Además, la presencia de la barra de tareas puede ser y go.Additionally, presence of the taskbar might come and go. Para comprobar si la barra de tareas está actualmente presente, llame al método TaskbarManager. GetDefault y compruebe que la instancia devuelta no sea NULL.To check whether taskbar is currently present, call the TaskbarManager.GetDefault method and check that the instance returned is not null. No muestre un botón de anclaje si la barra de tareas no está presente.Don't display a pin button if the taskbar isn't present.

Se recomienda mantener en la instancia mientras dure una sola operación, como anclar y, a continuación, capturar una nueva instancia la próxima vez que necesite realizar otra operación.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. Compruebe si el icono está anclado a la barra de tareas.3. Check whether your tile is currently pinned to the taskbar

Si el icono ya está anclado, debe mostrar un botón desanclar en su lugar.If your tile is already pinned, you should display an unpin button instead. Puede usar el método IsSecondaryTilePinnedAsync para comprobar si el icono está anclado actualmente (los usuarios pueden desanclarlo en cualquier momento).You can use the IsSecondaryTilePinnedAsync method to check whether your tile is currently pinned (users can unpin it at any time). En este método, se pasa el TileId del icono que desea saber que está anclado.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. comprobar si se permite el anclaje4. Check whether pinning is allowed

Directiva de grupo puede deshabilitar el anclaje en la barra de tareas.Pinning to the taskbar can be disabled by Group Policy. La propiedad TaskbarManager. IsPinningAllowed le permite comprobar si se permite el anclaje.The TaskbarManager.IsPinningAllowed property lets you check whether pinning is allowed.

Cuando el usuario hace clic en el botón anclar, debe activar esta propiedad y, si es false, debería mostrar un cuadro de diálogo de mensaje que informa al usuario de que no se permite el anclaje en este equipo.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. construir y anclar el icono5. Construct and pin your tile

El usuario ha hecho clic en el botón anclar y ha determinado que las API están presentes, la barra de tareas está presente y se permite el anclaje... tiempo para anclarThe 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!

En primer lugar, construya el icono secundario tal como lo haría al anclar a Inicio.First, construct your secondary tile just like you would when pinning to Start. Puede obtener más información sobre las propiedades de los iconos secundarios leyendo los iconos secundarios de PIN para iniciar.You can learn more about the secondary tile properties by reading Pin secondary tiles to Start. Sin embargo, al anclar a la barra de tareas, además de las propiedades necesarias anteriormente, también se requiere Square44x44Logo (este es el logotipo que usa la barra de tareas).However, when pinning to taskbar, in addition to the previously required properties, Square44x44Logo (this is the logo used by taskbar) is also required. De lo contrario, se producirá una excepción.Otherwise, an exception will be thrown.

A continuación, pase el icono al método RequestPinSecondaryTileAsync .Then, pass the tile to the RequestPinSecondaryTileAsync method. Como esto está en acceso limitado, no se mostrará un cuadro de diálogo de confirmación y no se requiere un subproceso de interfaz de usuario.Since this is under limited-access, this will not display a confirmation dialog and does not require a UI thread. Pero en el futuro, cuando se abre más allá del acceso limitado, los autores de la llamada que no usen acceso limitado recibirán un cuadro de diálogo y serán necesarios para usar el subproceso de la interfaz de usuario.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);

Este método devuelve un valor booleano que indica si el icono ahora está anclado a la barra de tareas.This method returns a boolean value that indicates whether your tile is now pinned to the taskbar. Si el icono ya estaba anclado, el método actualiza el icono existente y devuelve true.If your tile was already pinned, the method updates the existing tile and returns true. Si no se permite el anclaje o no se admite la barra de tareas, el método devuelve false.If pinning wasn't allowed or taskbar isn't supported, the method returns false.

Enumerar iconosEnumerate tiles

Para ver todos los mosaicos que creó y siguen anclados en algún lugar (Inicio, barra de tareas o ambos), use FindAllAsync.To see all the tiles that you created and are still pinned somewhere (Start, taskbar, or both), use FindAllAsync. Posteriormente, puede comprobar si estos mosaicos están anclados a la barra de tareas o iniciar.You can subsequently check whether these tiles are pinned to the taskbar and/or Start. Si no se admite la superficie, estos métodos devuelven 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
    }
}

Actualizar un iconoUpdate a tile

Para actualizar un icono ya anclado, puede usar el método SecondaryTile. UpdateAsync tal y como se describe en actualizar un icono secundario.To update an already pinned tile, you can use the SecondaryTile.UpdateAsync method as described in Updating a secondary tile.

Desanclar un iconoUnpin a tile

La aplicación debe proporcionar un botón desanclar si el icono está anclado actualmente.Your app should provide an unpin button if the tile is currently pinned. Para desanclar el icono, simplemente llame a TryUnpinSecondaryTileAsync, pasando el TileId del icono secundario que le gustaría desanclar.To unpin the tile, simply call TryUnpinSecondaryTileAsync, passing in the TileId of the secondary tile you would like unpinned.

Este método devuelve un valor booleano que indica si el icono ya no está anclado a la barra de tareas.This method returns a boolean value that indicates whether your tile is no longer pinned to the taskbar. Si el icono no se ancló en primer lugar, también devuelve true.If your tile wasn't pinned in the first place, this also returns true. Si no se permite desanclar, se devuelve false.If unpinning wasn't allowed, this returns false.

Si el icono solo está anclado a la barra de tareas, se eliminará el icono, ya que ya no está anclado en ningún lugar.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");
}

Eliminar un iconoDelete a tile

Si desea desanclar un icono desde cualquier lugar (Inicio, barra de tareas), use el método RequestDeleteAsync .If you want to unpin a tile from everywhere (Start, taskbar), use the RequestDeleteAsync method.

Esto es adecuado para los casos en los que el contenido anclado por el usuario ya no es aplicable.This is appropriate for cases where the content the user pinned is no longer applicable. Por ejemplo, si la aplicación le permite anclar un bloc de notas a Inicio y a la barra de tareas, y el usuario elimina el cuaderno, simplemente debe eliminar el icono asociado al cuaderno.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();

Desanclar solo de inicioUnpin only from Start

Si solo desea desanclar un icono secundario de Start mientras lo deja en la barra de tareas, puede llamar al método StartScreenManager. TryRemoveSecondaryTileAsync .If you only want to unpin a secondary tile from Start while leaving it on Taskbar, you can call the StartScreenManager.TryRemoveSecondaryTileAsync method. De igual forma, se eliminará el icono si deja de estar anclado a otras superficies.This will similarly delete the tile if it is no longer pinned to any other surfaces.

Este método devuelve un valor booleano que indica si el icono ya no está anclado al inicio.This method returns a boolean value that indicates whether your tile is no longer pinned to Start. Si el icono no se ancló en primer lugar, también devuelve true.If your tile wasn't pinned in the first place, this also returns true. Si no se permite el desanclado o no se admite el inicio, devuelve false.If unpinning wasn't allowed or Start isn't supported, this returns false.

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

RecursosResources