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.Mode를 None으로 설정하여 처리를 위해 모든 입력을 앱으로 전달할 수 있습니다.

InkPresenter에서 처리되지 않은 입력을 그대로 두면 사용자 지정된 잉크 환경 및 선택과 같은 확장된 기능을 지원할 수 있습니다.

잉크 입력을 완전히 제어하고 유니버설 Windows 앱의 Direct2D 디바이스 컨텍스트로 렌더링하려면 기본 InkCanvas 컨트롤 대신 InkCanvas 를 로드하기 전에 ActivateCustomDrying 을 호출 합니다. 이렇게 하려면 잉크 입력을 관리하려면 IInkD2DRenderer 개체가 필요합니다( 복합 잉크 샘플 참조).

버전 기록

Windows 버전 SDK 버전 추가된 값
1703 15063 HighContrastAdjustment
1803 17134 InputConfiguration

속성

HighContrastAdjustment

시스템이 고대비 모드일 때 InkPresenter 개체가 연결된 InkCanvas 컨트롤에서 입력(표준 및 수정)을 처리하는 방법을 가져오거나 설정합니다.

InputConfiguration

InkPresenter 개체에서 처리할 수 있는 보조 입력 유형을 가져옵니다.

InputDeviceTypes

InkPresenter에서 입력 데이터를 수집하여 InkStroke를 생성하고 렌더링할 입력 디바이스 유형을 가져오거나 설정합니다. 기본값은 입니다.

InputProcessingConfiguration

InkPresenter 개체에서 입력을 처리하는 방법을 가져옵니다.

IsInputEnabled

입력이 수동 입력에 사용되는지 여부를 가져오거나 설정합니다.

StrokeContainer

InkPresenter에서 렌더링한 InkStroke 개체의 컬렉션을 저장하고 관리할 InkStrokeContainer 개체를 가져오거나 설정합니다.

스트로크 컨테이너의 잉크 스트로크를 수정하면 InkPresenter와 연결된 그리기 표면에 즉시 렌더링됩니다.

StrokeInput

잉크 입력 이벤트를 관리하기 위한 InkStrokeInput 개체를 가져옵니다.

UnprocessedInput

연결된 InkCanvas 컨트롤에서 입력(표준 또는 수정됨)을 가져오고 앱에서 사용자 지정 처리를 위해 데이터를 전달합니다. 데이터는 InkPresenter에서 처리되지 않습니다.

참고

표준 입력은 펜 배럴 단추, 마우스 오른쪽 단추 또는 이와 유사한 보조 어페어던스로 수정되지 않습니다.

InkInputProcessingConfiguration을 사용하여 사용자 지정 처리를 위해 InkUnprocessedInput으로 앱에 전달할 입력을 나타냅니다.

메서드

ActivateCustomDrying()

앱에서 잉크 입력 렌더링을 완벽하게 제어해야 했음을 나타냅니다.

기본적으로 잉크 입력은 짧은 대기 시간의 백그라운드 스레드에서 처리되고 그릴 때 "젖은" 상태로 렌더링됩니다. 스트로크가 완료되면(펜 또는 손가락을 떼거나 마우스 단추를 놓으면) 스트로크가 UI 스레드에서 처리되고 렌더링 계층(애플리케이션 콘텐츠 위에 있고 젖은 잉크를 대체함)에 "건조"하게 렌더링됩니다.

InkPresenter 호스팅 모델

InkCanvas

ActivateCustomDrying(InkCanvas가 로드되기 전에)를 호출하면 앱은 InkSynchronizer 개체를 만들어 잉크 스트로크가 SurfaceImageSource 또는 VirtualSurfaceImageSource에 대해 건조 상태로 렌더링되는 방식을 사용자 지정합니다. 예를 들어 잉크 스트로크는 별도의 InkCanvas 계층이 아닌 애플리케이션 콘텐츠로 래스터화되고 통합될 수 있습니다.

InkDesktopHost(Windows 10 버전 1511 이상)

Win32 앱은 DirectComposition 시각적 트리를 사용하여 InkDesktopHost에서InkPresenter를 호스트할 수 있습니다.

이렇게 하려면 잉크 입력을 관리하려면 IInkD2DRenderer 개체가 필요합니다( 복합 잉크 샘플 참조).

CoreInkPresenterHost(Windows 10 Fall Creators Update 이상)

사용자 고유의 Windows 에서 InkPresenter 를 호스트 합니다.Ui. 연결된 InkCanvas 컨트롤이 없는 컴퍼지션 트리입니다.

CopyDefaultDrawingAttributes()

InkCanvas 컨트롤에서 새 InkStroke를 렌더링할 때 InkPresenter에서 사용하는 InkDrawingAttributes를 검색합니다.

이 메서드는 UpdateDefaultDrawingAttributes 와 함께 런타임에 그리기 특성을 설정하는 데 사용됩니다.

SetPredefinedConfiguration(InkPresenterPredefinedConfiguration)

연결된 InkCanvas 컨트롤에서 하나 이상의 접점의 수동 입력 동작을 설정합니다.

UpdateDefaultDrawingAttributes(InkDrawingAttributes)

InkCanvas 컨트롤에서 새 InkStroke를 렌더링할 때 InkPresenter에서 사용하는 InkDrawingAttributes를 설정합니다.

이 메서드는 CopyDefaultDrawingAttributes 와 함께 런타임에 그리기 특성을 설정하는 데 사용됩니다.

이벤트

StrokesCollected

애플리케이션 스레드에서 하나 이상의 잉크 스트로크를 처리("젖은"에서 "건조")할 때 발생합니다.

기본적으로 잉크 스트로크는 대기 시간이 짧은 백그라운드 스레드에서 처리되고 그릴 때 습하게 렌더링됩니다. 스트로크가 완료되면(펜 또는 손가락을 떼거나 마우스 단추를 놓으면) 스트로크가 UI 스레드에서 처리되고 InkCanvas 계층(애플리케이션 콘텐츠 위)에 건조하게 렌더링됩니다. UI 스레드가 사용 중인 경우 스레드를 사용할 수 있게 되면 둘 이상의 잉크 스트로크가 처리(수집)될 수 있습니다.

StrokesErased

모드가 지우기로 설정된 경우 펜 지우개 또는 펜 팁을 사용하여 InkCanvas 컨트롤에서InkStroke 개체를 제거할 때 발생합니다.

적용 대상

추가 정보