【发布时间】:2021-02-02 16:18:49
【问题描述】:
我正在学习如何开发 UWP 应用,并且我正在使用 Microsoft 的文档作为教程/研究。
我想要一个类似于 OneNote 的 InkCanvas 设计,其中 InkCanvas 的高度和宽度可以扩展(当您正在书写/绘图并达到窗口大小的末端)并且可以缩小(当您擦除墨迹笔划和额外的大小可以根据墨水笔划的位置减小,直到恢复到原始大小)。
我可以增加 InkCanvas 的宽度和高度,但在擦除墨迹时不能减小。
这是一个 MainPage.xaml 代码:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBlock Text="Heading"
FontSize="36"
FontWeight="Bold"
Margin="10"
Grid.Column="0"
Grid.Row="0"/>
<Grid BorderBrush="Red"
BorderThickness="2"
Margin="10"
Grid.Column="0"
Grid.Row="1">
<ScrollViewer HorizontalScrollBarVisibility="Auto"
HorizontalScrollMode="Enabled"
VerticalScrollBarVisibility="Auto"
VerticalScrollMode="Enabled" >
<Grid BorderBrush="Blue"
BorderThickness="2"
Margin="1">
<InkCanvas Name="inkCanvas"/>
</Grid>
</ScrollViewer>
</Grid>
还有 MainPage.cs 代码:
public MainPage()
{
this.InitializeComponent();
nkCanvas.InkPresenter.StrokeInput.StrokeEnded += adjustInkCanvasSize;
}
private async void adjustInkCanvasSize(InkStrokeInput sender, PointerEventArgs args)
{
await Task.Delay(100);
var XBound = inkCanvas.InkPresenter.StrokeContainer.BoundingRect.Bottom;
if (XBound > inkCanvas.ActualHeight - 200)
inkCanvas.Height = XBound + 200;
var YBound = inkCanvas.InkPresenter.StrokeContainer.BoundingRect.Right;
if (YBound > inkCanvas.ActualWidth - 200)
inkCanvas.Width = YBound + 200;
}
c# 代码也来自另一个 stackoverflow 解决方案,但无法弄清楚“减少”部分。
任何帮助将不胜感激。谢谢
【问题讨论】: