Compartilhar via


Fixar blocos secundários na barra de tarefas

Observação

Os Blocos Dinâmicos são um recurso do Windows 10 que não é compatível com versões posteriores do Windows. Para novos aplicativos, recomendamos que você siga as diretrizes atuais para ícones de aplicativos.

Assim como fixar blocos secundários na tela inicial, você pode fixar blocos secundários na barra de tarefas, dando aos usuários acesso rápido ao conteúdo do seu aplicativo.

Fixação da barra de tarefas

Importante

API de acesso limitado: essa API é um recurso de acesso limitado. Para usar essa API, entre em contato com taskbarsecondarytile@microsoft.com.

Requer atualização de outubro de 2018: você deve direcionar o SDK 17763 e estar executando o build 17763 ou posterior para fixar na barra de tarefas.

Diretrizes

Um bloco secundário fornece uma maneira consistente e eficiente para os usuários acessarem diretamente áreas específicas dentro de um aplicativo. Embora um usuário escolha se deseja ou não "fixar" um bloco secundário na barra de tarefas, as áreas fixáveis em um aplicativo são determinadas pelo desenvolvedor. Para obter mais diretrizes, consulte Diretrizes de bloco secundário.

1. Determine se a API existe e desbloqueie o acesso limitado

Dispositivos mais antigos não têm as APIs de fixação da barra de tarefas (se você estiver direcionando versões mais antigas do Windows 10). Portanto, você não deve exibir um botão de alfinete nesses dispositivos que não são capazes de fixar.

Além disso, esse recurso está bloqueado em Acesso limitado. Para obter acesso, entre em contato com a Microsoft. As chamadas de API para TaskbarManager.RequestPinSecondaryTileAsync, TaskbarManager.IsSecondaryTilePinnedAsync e TaskbarManager.TryUnpinSecondaryTileAsync falharão com uma exceção de Acesso Negado. Os aplicativos não têm permissão para usar essa API sem permissão, e a definição da API pode ser alterada a qualquer momento.

Use o método ApiInformation.IsMethodPresent para determinar se as APIs estão presentes. Em seguida, use a API LimitedAccessFeatures para tentar desbloquear a 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. Obtenha a instância do TaskbarManager

Os aplicativos do Windows podem ser executados em uma ampla variedade de dispositivos; nem todos dão suporte à barra de tarefas. No momento, somente dispositivos da área de trabalho dão suporte à barra de tarefas. Além disso, a presença da barra de tarefas pode ir e vir. Para verificar se a barra de tarefas está presente no momento, chame o método TaskbarManager.GetDefault e verifique se a instância retornada não é nula. Não exiba um botão de alfinete se a barra de tarefas não estiver presente.

Recomendamos manter a instância durante uma única operação, como fixar, e obter uma nova instância na próxima vez que precisar fazer outra operação.

TaskbarManager taskbarManager = TaskbarManager.GetDefault();

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

3. Verifique se o bloco está fixado na barra de tarefas

Se o bloco já estiver fixado, você deverá exibir um botão de desafixar. Você pode usar o método IsSecondaryTilePinnedAsync para verificar se o bloco está fixado no momento (os usuários podem desafixá-lo a qualquer momento). Neste método, você passa o TileId bloco que deseja saber se está fixado.

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. Verifique se a fixação é permitida

A fixação na barra de tarefas pode ser desabilitada pela Política de Grupo. A propriedade TaskbarManager.IsPinningAllowed permite verificar se a fixação é permitida.

Quando o usuário clica no botão de fixação, você deve verificar essa propriedade e, se for falsa, você deve exibir uma caixa de diálogo de mensagem informando ao usuário que a fixação não é permitida neste computador.

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. Construa e fixe seu ladrilho

O usuário clicou no botão de fixação e você determinou que as APIs estão presentes, a barra de tarefas está presente e a fixação é permitida... hora de fixar!

Primeiro, construa seu bloco secundário da mesma forma que faria ao fixar na tela inicial. Você pode saber mais sobre as propriedades do bloco secundário lendo Fixar blocos secundários na tela inicial. No entanto, ao fixar na barra de tarefas, além das propriedades exigidas anteriormente, Square44x44Logo (esse é o logotipo usado pela barra de tarefas) também é necessário. Caso contrário, uma exceção será gerada.

Em seguida, passe o bloco para o método RequestPinSecondaryTileAsync . Como isso está sob acesso limitado, isso não exibirá uma caixa de diálogo de confirmação e não exigirá um thread de interface do usuário. Mas, no futuro, quando isso for aberto além do acesso limitado, os chamadores que não utilizarem o acesso limitado receberão uma caixa de diálogo e serão obrigados a usar o thread da interface do usuário.

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

Esse método retorna um valor booliano que indica se o bloco agora está fixado na barra de tarefas. Se o bloco já tiver sido fixado, o método atualizará o bloco existente e retornará true. Se a fixação não for permitida ou não houver suporte para a barra de tarefas, o método retornará false.

Enumerar blocos

Para ver todos os blocos que você criou e ainda estão fixados em algum lugar (Iniciar, barra de tarefas ou ambos), use FindAllAsync. Posteriormente, você pode verificar se esses blocos estão fixados na barra de tarefas e/ou em Iniciar. Se a superfície não for suportada, esses métodos retornarão 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
    }
}

Atualizar um bloco

Para atualizar um bloco já fixado, você pode usar o método SecondaryTile.UpdateAsync, conforme descrito em Atualizando um bloco secundário.

Desafixar um bloco

Seu aplicativo deve fornecer um botão de desafixar se o bloco estiver fixado no momento. Para desafixar o bloco, basta chamar TryUnpinSecondaryTileAsync, passando o TileId bloco secundário que você deseja desafixar.

Esse método retorna um valor booliano que indica se o bloco não está mais fixado na barra de tarefas. Se o seu bloco não foi fixado em primeiro lugar, isso também retorna true. Se a desafixação não foi permitida, isso retorna false.

Se o bloco foi fixado apenas na barra de tarefas, isso excluirá o bloco, pois ele não está mais fixado em nenhum lugar.

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

Excluir um bloco

Se você quiser desafixar um bloco de qualquer lugar (Iniciar, barra de tarefas), use o método RequestDeleteAsync .

Isso é apropriado para casos em que o conteúdo fixado pelo usuário não é mais aplicável. Por exemplo, se o aplicativo permitir que você fixe um bloco de anotações na tela inicial e na barra de tarefas e, em seguida, o usuário excluir o bloco de anotações, basta excluir o bloco associado ao bloco de anotações.

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

Desafixar apenas do início

Se você quiser apenas desafixar um bloco secundário da tela Iniciar enquanto o deixa na barra de tarefas, poderá chamar o método StartScreenManager.TryRemoveSecondaryTileAsync . Isso excluirá o bloco da mesma forma se ele não estiver mais fixado em nenhuma outra superfície.

Esse método retorna um valor booliano que indica se o bloco não está mais fixado em Iniciar. Se o seu bloco não foi fixado em primeiro lugar, isso também retorna true. Se a desafixação não for permitida ou não houver suporte para Iniciar, isso retornará false.

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

Recursos