InkPresenter クラス

定義

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
継承
Object Platform::Object IInspectable InkPresenter
属性

Windows の要件

デバイス ファミリ
Windows 10 (10.0.10240.0 - for Xbox, see UWP features that aren't yet supported on Xbox で導入)
API contract
Windows.Foundation.UniversalApiContract (v1.0 で導入)

ここでは、画像にインク注釈をオーバーレイする方法を示します。 この例では、インク データは、対応する InkPresenter によってキャプチャまたは保存されません。

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

次の例では、ペンとマウスの両方の入力データをインク ストロークとして解釈するように InkPresenter を構成しています。 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);
}

インク ストロークの属性は、ユーザー設定やアプリの要件に合わせて動的に設定できます。

次の例では、ユーザーがインクの色を一覧から選べるようにしています。

<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>

ユーザーが色を選択したら、その変更を処理して、それに合わせてインク ストロークの属性を更新します。

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

注釈

ユニバーサル Windows アプリの場合は、InkManager の代わりに InkPresenter と InkCanvas コントロールを使用することをお勧めします。

InkPresenter クラスを直接インスタンス化することはできません。 InkCanvas オブジェクトのプロパティとして返されます。

注意

標準のインク入力 (ペン先または消しゴムの先端/ボタン) は、ペンバレル ボタン、マウスの右ボタンなどのセカンダリ アフォーダンスでは変更されません ( RightDragAction を参照)。

既定では、標準のインク入力と変更されたインク入力の両方が InkPresenter によって完全に管理され、InkInputProcessingConfiguration.Mode に基づいてインク ストロークまたは消去ストロークとして InkCanvas にレンダリングされます。

変更された入力は、 InkInputProcessingConfiguration.RightDragAction を InkInputRightDragAction.LeaveUnprocessed に設定することで、処理のためにアプリ 渡すことができます。

InkInputProcessingConfiguration.ModeNone に設定することで、すべての入力をアプリに渡して処理できます。

InkPresenter によって入力が処理されないままにすると、カスタマイズされたインク エクスペリエンスや、選択などの拡張機能をサポートできます。

インク入力を完全に制御し、それをユニバーサル Windows アプリの Direct2D デバイス コンテキストにレンダリングするには、既定の InkCanvas コントロールではなく、InkCanvas を読み込む前に ActivateCustomDrying を呼び出します。 これには、インク入力を管理するために IInkD2DRenderer オブジェクトが必要です ( 「複雑なインクサンプル」を参照してください)。

バージョン履歴

Windows のバージョン SDK バージョン 追加された値
1703 15063 HighContrastAdjustment
1803 17134 InputConfiguration

プロパティ

HighContrastAdjustment

システムがハイ コントラスト モードのときに、関連する InkCanvas コントロールからの入力 (標準および変更済み) を InkPresenter オブジェクトが処理する方法を取得または設定します。

InputConfiguration

InkPresenter オブジェクトで処理できるセカンダリ入力の種類を取得します。

InputDeviceTypes

InkStroke を構築してレンダリングするために InkPresenter によって入力データを収集する入力デバイスの種類を取得または設定します。 既定値は Pen です

InputProcessingConfiguration

InkPresenter オブジェクトによる入力の処理方法を取得します。

IsInputEnabled

入力が手描き入力に対して有効かどうかを取得または設定します。

StrokeContainer

InkPresenter によってレンダリングされる InkStroke オブジェクトのコレクションを格納および管理する InkStrokeContainer オブジェクトを取得または設定します。

ストローク コンテナー内のいずれかのインク ストロークに対して行われた変更は、 InkPresenter に関連付けられている描画サーフェイスにすぐにレンダリングされます。

StrokeInput

インク入力イベントを管理するための InkStrokeInput オブジェクトを取得します。

UnprocessedInput

関連付けられた InkCanvas コントロールから入力 (標準または変更済み) を取得し、アプリによるカスタム処理のためにデータを渡します。 データは InkPresenter によって処理されません。

注意

標準入力は、ペン バレル ボタン、マウスの右ボタンなど、セカンダリ アフォーダンスでは変更されません。

InkInputProcessingConfiguration を使用して、カスタム処理のために InkUnprocessedInput としてアプリに渡される入力を示します。

メソッド

ActivateCustomDrying()

アプリでインク入力のレンダリングを完全に制御する必要があることを示します。

既定では、手書き入力は低待機時間のバックグラウンド スレッドで処理され、描画と同時に "ウェット" レンダリングが行われます。 ストロークが完了すると (ペンまたは指が持ち上げられたり、マウス ボタンが離されたりした場合)、ストロークは UI スレッドで処理され、レンダリング レイヤーに "ドライ" レンダリングされます (アプリケーションコンテンツの上に、ウェット インクを置き換えます)。

InkPresenter ホスティング モデル

InkCanvas

ActivateCustomDrying を (InkCanvas が読み込まれる前に) 呼び出すと、SurfaceImageSource または VirtualSurfaceImageSource へのインク ストロークのドライ レンダリングの方法をカスタマイズするための InkSynchronizer オブジェクトが作成されます。 たとえば、インク ストロークをラスタライズしてアプリケーション コンテンツに (別の InkCanvas レイヤーとしてではなく) 統合することができます。

InkDesktopHost (Windows 10 バージョン 1511 以降)

Win32 アプリでは、DirectComposition ビジュアル ツリーを使用して InkDesktopHostInkPresenter をホストできます。

これには、インク入力を管理するために IInkD2DRenderer オブジェクトが必要です ( 「複雑なインクサンプル」を参照してください)。

CoreInkPresenterHost (Windows 10 Fall Creators Update 以降)

独自の Windows で InkPresenter をホスト します。Ui。InkCanvas コントロールが関連付けられていないコンポジション ツリー。

CopyDefaultDrawingAttributes()

InkCanvas コントロールに新しい InkStroke をレンダリングするときに InkPresenter によって使用される InkDrawingAttributes を取得します。

このメソッドは、実行時に描画属性を設定するために UpdateDefaultDrawingAttributes と組み合わせて使用されます。

SetPredefinedConfiguration(InkPresenterPredefinedConfiguration)

関連付けられた InkCanvas コントロール上の 1 つ以上の接触点の手描き入力動作を設定します。

UpdateDefaultDrawingAttributes(InkDrawingAttributes)

InkCanvas コントロールに新しい InkStroke をレンダリングするときに InkPresenter によって使用される InkDrawingAttributes を設定します。

このメソッドは、実行時に描画属性を設定するために CopyDefaultDrawingAttributes と組み合わせて使用されます。

イベント

StrokesCollected

アプリケーション スレッドによって 1 つ以上のインク ストロークが処理 ("wet" から "dry") されるときに発生します。

既定では、インク ストロークは待機時間の短いバックグラウンド スレッドで処理され、描画時に濡れてレンダリングされます。 ストロークが完了すると (ペンまたは指が持ち上げられたり、マウス ボタンが離されたり)、ストロークが UI スレッドで処理され、 InkCanvas レイヤー (アプリケーション コンテンツの上) に乾燥してレンダリングされます。 UI スレッドがビジー状態の場合、スレッドが使用可能になったときに、複数のインク ストロークが処理 (収集) される可能性があります。

StrokesErased

[モード] が [消去] に設定されている場合に、ペン消しゴムまたはペン先を使用して InkStroke オブジェクトが InkCanvas コントロールから削除されたときに発生します。

適用対象

こちらもご覧ください