【发布时间】:2020-06-19 17:12:05
【问题描述】:
我知道,如何使用 CanvasDrawingSession 绘制具有笔触粗细的矩形。但问题是,笔触粗细会在矩形内外增长。我需要笔触粗细必须只在矩形内增长。我不知道如何做到这一点!! 我试过的是什么?
我的 xaml 代码:
<Canvas x:Name="MyCanvas"> </Canvas>
我的 c# 代码:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
CanvasVirtualControl canvasVirtualControl = new CanvasVirtualControl();
canvasVirtualControl.Width = 1486;
canvasVirtualControl.Height = 610;
MyCanvas.Children.Add(canvasVirtualControl);
Canvas.SetLeft(canvasVirtualControl, 0);
Canvas.SetTop(canvasVirtualControl, 100);
canvasVirtualControl.RegionsInvalidated += CanvasVirtualControl_RegionsInvalidated;
}
private void CanvasVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
{
CanvasDrawingSession drawingSession;
Rect rect = new Rect(args.InvalidatedRegions[0].Left, args.InvalidatedRegions[0].Top, args.InvalidatedRegions[0].Width, args.InvalidatedRegions[0].Height);
using (drawingSession = sender.CreateDrawingSession(rect))
{
drawingSession.DrawRectangle(new Rect(0, 0, 200, 200), Windows.UI.Color.FromArgb(255, 255, 0, 0), 40);
}
}
为什么我的矩形画成这样?我认为这是因为矩形内部和外部的笔触厚度增加。如何解决仅在矩形内部增加笔触厚度的绘制矩形?
更新问题:
在使 CanvasVirtualControl 的整个区域无效时,strokethickness 在矩形内外增长。如果我,使 CanvasVirtualControl 的特定矩形区域无效,strokeThickness 仅在内部增长。
我的 Xaml 代码:
<Canvas x:Name="MyCanvas">
<Button Content="InvalidateWholeRegion" Height="100" Canvas.Left="0" Canvas.Top="0" Click="InvalidateWholeRegion"/>
<Button Content="InvalidateParticularRegion" Height="100" Canvas.Left="300" Canvas.Top="0" Click="InvalidateParticularRegion"/>
</Canvas>
我的 c# 代码:
CanvasVirtualControl canvasVirtualControl;
private void Page_Loaded(object sender, RoutedEventArgs e)
{
canvasVirtualControl = new CanvasVirtualControl();
canvasVirtualControl.Width = 1486;
canvasVirtualControl.Height = 610;
MyCanvas.Children.Add(canvasVirtualControl);
Canvas.SetLeft(canvasVirtualControl, 0);
Canvas.SetTop(canvasVirtualControl, 100);
canvasVirtualControl.RegionsInvalidated += CanvasVirtualControl_RegionsInvalidated;
}
private void CanvasVirtualControl_RegionsInvalidated(CanvasVirtualControl sender, CanvasRegionsInvalidatedEventArgs args)
{
CanvasDrawingSession drawingSession;
Rect rect = new Rect(args.InvalidatedRegions[0].Left, args.InvalidatedRegions[0].Top, args.InvalidatedRegions[0].Width, args.InvalidatedRegions[0].Height);
using (drawingSession = sender.CreateDrawingSession(rect))
{
drawingSession.DrawRectangle(new Rect(rect.X, rect.Y, 100, 100), Windows.UI.Color.FromArgb(255, 255, 0, 0), 40);
}
}
private void InvalidateParticularRegion(object sender, RoutedEventArgs e)
{
canvasVirtualControl.Invalidate(new Rect(200, 200, 100, 100));
}
private void InvalidateWholeRegion(object sender, RoutedEventArgs e)
{
canvasVirtualControl.Invalidate(new Rect(0, 0, 1486, 610));
}
如何在无效特定区域时画笔画厚度也在外面增长?
【问题讨论】:
-
您能否分享一个屏幕截图来解释笔画粗细在内外增长?为了使上述线程可读,您可以发布您编写的代码。
-
我已经更新了问题。请参考!
-
酷,我会测试你的代码并尝试找到解决方案,