我有一个画布(不是InkCanvas!),我可以在上面绘制Polylines . 这工作得很好,但是如下面的GIF所示,绘制出界限存在一个巨大的问题 .
我的画布在ScrollViewer中,ScrollViewer在GridView中 .
我试图捕获指针离开画布与以下事件处理程序:
canvas.PointerExited += Canvas_PointerExited;
canvas.PointerCaptureLost += Canvas_PointerCaptureLost;
但似乎这些事件被解雇得太慢了 .
我尝试使用画布的Clip属性,但行为没有变化 . 并且UWP画布没有“ClipToBound”属性 .
我的整个视图是在Code-Behind中生成的,因为我必须在一个视图上生成多个画布 .
有没有办法阻止这种行为?
EDIT1:
根据要求:更深入了解我的代码 .
XAML页面如下所示:
它都在一个页面内 .
我的代码背后看起来像这样:
我的建设者:
public ImprovedCanvasManager(Grid boundingGrid, Grid overviewGrid, string filepath, double height)
{
drawCanvas = new Canvas();
overviewGrid.Loaded += OverviewGrid_Loaded;
overviewGrid.SizeChanged += OverviewGrid_SizeChanged;
RowDefinition rd = new RowDefinition();
rd.Height = new GridLength(height);
overviewGrid.RowDefinitions.Add(rd);
InitializeScrollViewer();
Grid.SetRow(scroll, overviewGrid.RowDefinitions.Count);
Grid.SetColumn(scroll, 0);
scroll.Content = drawCanvas;
overviewGrid.Children.Add(scroll);
LoadImage(filepath);
}
public ImprovedCanvasManager(Grid boundingGrid, Grid overviewGrid, Grid inkToolGrid, string filepath, double height = 1000) : this(boundingGrid, overviewGrid, filepath, height)
{
AddDrawingToolsToCanvas(inkToolGrid, overviewGrid);
EnableDrawingOnCanvas(drawCanvas);
}
我只有两个构造器,使我能够简单地实例化具有绘制和无绘制能力的画布 .
这是我初始化我的ScrollViewer的方式:
private void InitializeScrollViewer()
{
scroll = new ScrollViewer();
scroll.VerticalAlignment = VerticalAlignment.Top;
scroll.VerticalScrollMode = ScrollMode.Auto;
scroll.HorizontalScrollMode = ScrollMode.Auto;
scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
scroll.ZoomMode = ZoomMode.Enabled;
scroll.ManipulationMode = ManipulationModes.All;
scroll.MinZoomFactor = 1;
scroll.MaxZoomFactor = 3;
}
这些是影响任何视图构建的唯一代码行 .
Edit 2:
我的画布不会填充左侧的周围网格,而是填充底部 .