java canvas画图,UWP Canvas绘图越界

我有一个画布(不是InkCanvas!),我可以在上面绘制Polylines . 这工作得很好,但是如下面的GIF所示,绘制出界限存在一个巨大的问题 .

vXeXG.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:

我的画布不会填充左侧的周围网格,而是填充底部 .

Oh34R.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值