当用户 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。
尝试的解决方案:
- 我为
InkCanvas
尝试了 ScrollViewer
,但没有成功
- 我想重新设计它,但我在 generic.xaml
中找不到 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;
}
当用户 Ink 接近 InkCanvas
末尾时,我想增加 InkCanvas
的高度或宽度(通过滚动) Like OneNote。
尝试的解决方案:
- 我为
InkCanvas
尝试了ScrollViewer
,但没有成功 - 我想重新设计它,但我在 generic.xaml 中找不到
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;
}