InkPresenter Classe

Definição

Fornece propriedades, métodos e eventos para gerenciar a entrada, o processamento e a renderização de entrada à tinta (padrão e modificado) para um controle InkCanvas .

public ref class InkPresenter sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class InkPresenter final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class InkPresenter
Public NotInheritable Class InkPresenter
Herança
Object Platform::Object IInspectable InkPresenter
Atributos

Requisitos do Windows

Família de dispositivos
Windows 10 (introduzida na 10.0.10240.0 - for Xbox, see UWP features that aren't yet supported on Xbox)
API contract
Windows.Foundation.UniversalApiContract (introduzida na v1.0)

Exemplos

Aqui, mostramos como sobrepor anotações à tinta em uma imagem. Para este exemplo, os dados de tinta não são capturados ou salvos por um InkPresenter correspondente.

<ScrollViewer>
  <Grid>
    <Image Source="<path>"></Image>
    <InkCanvas x:Name="inkCanvas"></InkCanvas>
  </Grid>
</ScrollView

Aqui, configuramos o InkPresenter para interpretar dados de entrada da caneta e do mouse como traços de tinta. Também definimos alguns atributos iniciais de traço de tinta usados para renderizar traços para o InkCanvas.

public MainPage()
{
    this.InitializeComponent();

    // Set supported inking device types.
    inkCanvas.InkPresenter.InputDeviceTypes = 
        Windows.UI.Core.CoreInputDeviceTypes.Mouse | 
        Windows.UI.Core.CoreInputDeviceTypes.Pen;

    // Set initial ink stroke attributes.
    InkDrawingAttributes drawingAttributes = new InkDrawingAttributes();
    drawingAttributes.Color = Windows.UI.Colors.Black;
    drawingAttributes.IgnorePressure = false;
    drawingAttributes.FitToCurve = true;
    inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(drawingAttributes);
}

Atributos de traço de tinta podem ser definidos dinamicamente para acomodar as preferências do usuário ou requisitos do aplicativo.

Aqui, permitimos que um usuário escolha suas preferências em uma lista de cores de tinta.

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <StackPanel x:Name="HeaderPanel" Orientation="Horizontal" Grid.Row="0">
        <TextBlock x:Name="Header" 
                   Text="Basic ink customization sample" 
                   VerticalAlignment="Center"
                   Style="{ThemeResource HeaderTextBlockStyle}" 
                   Margin="10,0,0,0" />
        <TextBlock Text="Color:"
                   Style="{StaticResource SubheaderTextBlockStyle}"
                   VerticalAlignment="Center"
                   Margin="50,0,10,0"/>
        <ComboBox x:Name="PenColor"
                  VerticalAlignment="Center"
                  SelectedIndex="0"
                  SelectionChanged="OnPenColorChanged">
            <ComboBoxItem Content="Black"/>
            <ComboBoxItem Content="Red"/>
        </ComboBox>
    </StackPanel>
    <Grid Grid.Row="1">
        <Image Source="Assets\StoreLogo.png" />
        <InkCanvas x:Name="inkCanvas" />
    </Grid>
</Grid>

Em seguida, manipulamos as alterações feitas na cor selecionada e atualizamos os atributos de traço de tinta de acordo.

// Update ink stroke color for new strokes.
private void OnPenColorChanged(object sender, SelectionChangedEventArgs e)
{
    if (inkCanvas != null)
    {
        InkDrawingAttributes drawingAttributes = 
            inkCanvas.InkPresenter.CopyDefaultDrawingAttributes();

        string value = ((ComboBoxItem)PenColor.SelectedItem).Content.ToString();

        switch (value)
        {
            case "Black":
                drawingAttributes.Color = Windows.UI.Colors.Black;
                break;
            case "Red":
                drawingAttributes.Color = Windows.UI.Colors.Red;
                break;
            default:
                drawingAttributes.Color = Windows.UI.Colors.Black;
                break;
        };

        inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(drawingAttributes);
    }
}

Comentários

Para aplicativos Universais do Windows, recomendamos usar InkPresenter e o controle InkCanvas em vez de InkManager.

A classe InkPresenter não pode ser instanciada diretamente. Ele é retornado como uma propriedade de um objeto InkCanvas .

Observação

A entrada de tinta padrão (dica de caneta ou botão de borracha) não é modificada com uma acessibilidade secundária, como um botão de barril de caneta, botão direito do mouse ou semelhante (consulte RightDragAction).

Por padrão, a entrada de tinta padrão e modificada é gerenciada inteiramente pelo InkPresenter e renderizada para o InkCanvas como um traço de tinta ou um traço de apagamento, com base em InkInputProcessingConfiguration.Mode.

A entrada modificada pode ser passada para seu aplicativo para processamento definindo InkInputProcessingConfiguration.RightDragAction como InkInputRightDragAction.LeaveUnprocessed.

Todas as entradas podem ser passadas para seu aplicativo para processamento definindo InkInputProcessingConfiguration.Mode como None.

Deixar a entrada não processada pelo InkPresenter permite que você dê suporte a uma experiência de tinta personalizada e funcionalidade estendida, como seleção.

Para ter controle completo da entrada à tinta e renderizá-la para o contexto do dispositivo Direct2D do aplicativo Universal do Windows, em vez do controle Padrão inkCanvas , chame ActivateCustomDrying antes de carregar o InkCanvas. Isso requer um objeto IInkD2DRenderer para gerenciar a entrada de tinta (consulte o exemplo de tinta complexa).

Histórico de versão

Versão do Windows Versão do SDK Valor adicionado
1703 15063 HighContrastAdjustment
1803 17134 InputConfiguration

Propriedades

HighContrastAdjustment

Obtém ou define como o objeto InkPresenter manipula a entrada (padrão e modificada) do controle InkCanvas associado quando o sistema está no modo de alto contraste.

InputConfiguration

Obtém quais tipos de entrada secundária podem ser processados pelo objeto InkPresenter .

InputDeviceTypes

Obtém ou define o tipo de dispositivo de entrada do qual os dados de entrada são coletados pelo InkPresenter para construir e renderizar um InkStroke. O padrão é Caneta.

InputProcessingConfiguration

Obtém como a entrada é processada pelo objeto InkPresenter .

IsInputEnabled

Obtém ou define se a entrada está habilitada para escrita à tinta.

StrokeContainer

Obtém ou define um objeto InkStrokeContainer para armazenar e gerenciar a coleção de objetos InkStroke renderizados pelo InkPresenter.

As modificações feitas em qualquer um dos traços de tinta no contêiner de traço são renderizadas imediatamente na superfície de desenho associada ao InkPresenter.

StrokeInput

Obtém um objeto InkStrokeInput para gerenciar eventos de entrada de tinta.

UnprocessedInput

Obtém a entrada (padrão ou modificada) do controle InkCanvas associado e passa os dados para processamento personalizado pelo aplicativo. Os dados não são processados pelo InkPresenter.

Observação

A entrada padrão não é modificada com uma acessibilidade secundária, como um botão de barril de caneta, botão direito do mouse ou semelhante.

Use InkInputProcessingConfiguration para indicar a entrada a ser passada como InkUnprocessedInput para seu aplicativo para processamento personalizado.

Métodos

ActivateCustomDrying()

Indica que seu aplicativo requer controle completo da renderização de entrada à tinta.

Por padrão, a entrada de tinta é processada em um thread em segundo plano e renderizada como "molhada" conforme é desenhada. Quando o traço é concluído (caneta ou dedo levantado ou botão do mouse liberado), o traço é processado no thread da interface do usuário e renderizado "seco" para a camada de renderização (acima do conteúdo do aplicativo e substituindo a tinta molhada).

Modelos de hospedagem do InkPresenter

InkCanvas

Chamar ActivateCustomDrying (antes de o InkCanvas ser carregado) faz com que um aplicativo crie um objeto InkSynchronizer para personalizar como um traço de tinta é renderizado como seco para um SurfaceImageSource ou VirtualSurfaceImageSource. Por exemplo, um traço de tinta poderia ser rasterizado e integrado no conteúdo de um aplicativo em vez de uma camada InkCanvas separada.

InkDesktopHost (Windows 10 versão 1511 e mais recente)

Os aplicativos Win32 podem hospedar um InkPresenter em um InkDesktopHost usando a árvore visual DirectComposition.

Isso requer um objeto IInkD2DRenderer para gerenciar a entrada de tinta (consulte o exemplo de tinta complexa).

CoreInkPresenterHost (Windows 10 Fall Creators Update e mais recente)

Hospede um InkPresenter em seu próprio Windows.UI.Árvore de composição sem um controle InkCanvas associado.

CopyDefaultDrawingAttributes()

Recupera os InkDrawingAttributes usados pelo InkPresenter ao renderizar um novo InkStroke em um controle InkCanvas .

Esse método é usado em conjunto com UpdateDefaultDrawingAttributes para definir atributos de desenho em tempo de execução.

SetPredefinedConfiguration(InkPresenterPredefinedConfiguration)

Define o comportamento de escrita à tinta de um ou mais pontos de contato no controle InkCanvas associado.

UpdateDefaultDrawingAttributes(InkDrawingAttributes)

Define o InkDrawingAttributes usado pelo InkPresenter ao renderizar um novo InkStroke em um controle InkCanvas .

Esse método é usado em conjunto com CopyDefaultDrawingAttributes para definir atributos de desenho em tempo de execução.

Eventos

StrokesCollected

Ocorre quando um ou mais traços de tinta são processados ("molhado" para "seco") pelo thread do aplicativo.

Por padrão, um traço de tinta é processado em um thread de fundo de baixa latência e renderizado molhado à medida que é desenhado. Quando o traço é concluído (caneta ou dedo levantado ou botão do mouse liberado), o traço é processado no thread da interface do usuário e renderizado seco para a camada InkCanvas (acima do conteúdo do aplicativo). Se o thread da interface do usuário estiver ocupado, mais de um traço de tinta poderá ser processado (coletado) quando o thread ficar disponível.

StrokesErased

Ocorre quando um objeto InkStroke é removido de um controle InkCanvas usando a borracha de caneta ou a dica de caneta quando Mode é definido como Apagamento.

Aplica-se a

Confira também