当用户 Ink 接近尾端时,如何增加 InkCanvas 的高度或宽度(通过滚动)?

How to increase the height or width(through scrolling) for InkCanvas when the user Ink near the end?

当用户 Ink 接近 InkCanvas 末尾时,我想增加 InkCanvas 的高度或宽度(通过滚动) Like OneNote。

尝试的解决方案:

  1. 我为 InkCanvas 尝试了 ScrollViewer,但没有成功
  2. 我想重新设计它,但我在 generic.xaml
  3. 中找不到 InkCanvas

这是我的 InkCanvas 代码:

<ScrollViewer Grid.Row="1">
    <Grid>
        <InkCanvas Name="PATH_INK_CANVAS" Canvas.ZIndex="-1"/>
        <RichEditBox Name="PATH_RICH_EDIT_BOX" Canvas.ZIndex="0" PlaceholderText="Input Text" Style="{StaticResource RichEditBoxStyle}"/>
    </Grid>
</ScrollViewer>

我们应该在 InkCanvas 中找到 Bound of Ink 并将其与 InkCanvas 的 ActualSize 进行比较,然后根据需要增加 InkCanvas。可以使用以下代码完成。

public MainPage()
{
    this.InitializeComponent();
    PATH_INK_CANVAS.InkPresenter.StrokeInput.StrokeEnded += StrokeInput_StrokeEndedAsync;
}

private async void StrokeInput_StrokeEndedAsync(InkStrokeInput sender, PointerEventArgs args)
{
    await Task.Delay(100);

    var XBound = PATH_INK_CANVAS.InkPresenter.StrokeContainer.BoundingRect.Bottom;
    if (XBound > PATH_INK_CANVAS.ActualHeight - 400)
        PATH_INK_CANVAS.Height = XBound + 400;

    var YBound = PATH_INK_CANVAS.InkPresenter.StrokeContainer.BoundingRect.Right;
    if (YBound > PATH_INK_CANVAS.ActualWidth - 400)
        PATH_INK_CANVAS.Width = YBound + 400;
}