Tag: canvas

即使光标位于canvas之外,也会调用MouseMove事件

我不知道我的代码或WPF是否有问题,但问题是:我想创建一个小程序,你可以在canvas中用光标绘制。 我有一个简单的WPF窗口: 这是后台代码: private void StackPan_MouseDown(object sender, MouseButtonEventArgs e) { draw = true; } private void StackPan_MouseUp(object sender, MouseButtonEventArgs e) { draw = false; } private void StackPan_MouseMove(object sender, MouseEventArgs e) { if (draw) { var pos = Mouse.GetPosition(imageCanvas); Rectangle rec = new Rectangle() { Width = 10, Height = 10, Fill = Brushes.Red, }; […]

始终在播放器前显示对象

我陷入了这个简单的问题,但无法理解为什么我无法控制它。 我有这些代码行在播放器的某个旋转处在我的播放器前面显示我的canvas对象(代码中的camRotationToWatch对象名称)。 if (camRotationToWatch.transform.localEulerAngles.x >= navigationCanvasXMinmumLimit && camRotationToWatch.transform.localEulerAngles.x <= navigationCanvasXMaximumLimit) { if (!navCanvasHasDisplay) { navigationCanvas.SetActive(true); //Debug.Log(camRotationToWatch.transform.forward); Vector3 navCanvas = camRotationToWatch.transform.position + camRotationToWatch.transform.forward * navCanvasDisplayDistanceFromCam; navCanvas = new Vector3(navCanvas.x, 2f, navCanvas.z); navigationCanvas.transform.position = new Vector3(navCanvas.x, navCanvas.y, navCanvas.z); navigationCanvas.transform.rotation = camRotationToWatch.transform.rotation; navCanvasHasDisplay = true; } } else { //navigationCanvas.SetActive(false); if (locationPanel.activeSelf == false && infoPanel.activeSelf == false) […]

放大Canvas的所有内容

我有这个Xaml: 我使用CanvasManager.cs类在Canvas绘图,它工作正常。 现在我需要放大Canvas :缩放Canvas (墨迹)并缩放它包含的内容( StackPanel +图像)。 在doubleTapping包含Canvas的ScrollViewer我有这个方法: private async void DScrollViewer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e) { Point point = e.GetPosition(DScrollViewer); if (DScrollViewer.ZoomFactor == 1) { await Task.Delay(300); DScrollViewer.ChangeView(point.X, point.Y, 2.0F, false); } else { await Task.Delay(300); DScrollViewer.ChangeView(point.X, point.Y, 1.0F, false); } } 结果是:只有Canvas (它的Ink)变焦, StackPanel及其图像留在这个地方,相同的比例,完好无损! 我究竟做错了什么?

Canvas和Grid之间的区别是移动,resize,旋转UIElements

我想开发一个可以动态添加控件的编辑器,然后移动,resize或旋转以使用此UIElements构建一个窗口。 我的问题是谁更适合这个UIElements,Grid或Canvas的容器? canvas在绝对位置工作,可能具有更好的转换精度。 但是当我以不同的屏幕分辨率显示应用程序时响应性会降低? 我不太了解Grid或Canvas的优点/缺点。 我用Canvas和Grid做了一个例子,用这个代码移动一个UIElement: private void ui_MouseMove(object sender, MouseEventArgs e) { if (m_IsPressed) { UIElement ui = (UIElement)sender; TranslateTransform transform = new TranslateTransform(); transform.X = Mouse.GetPosition(MyGridOrCanvas).X; transform.Y = Mouse.GetPosition(MyGridOrCanvas).Y; ui.RenderTransform = transform; } } 但是使用Canvas或Grid,当我单击UIElement并且不移动时,UIElement总是从我的光标移动x,y。 也许这不是最好的方法。 如果您还有关于如何构建此function的教程也会帮助我。 我对这些东西很新。 非常感谢和问候!

如何在像素艺术编辑器中优化绘制区域

我有像素艺术创作者程序,我在canvas上有一个矩形(像素?)。 这是很好的解决方案,不是很大的(例如128×128)。 如果我想在canvas上创建1024×1024矩形,这个过程非常长,ram使用量约为1-2 gb,之后程序运行速度非常慢。 如何优化这一点,或创造更好的解决方案?

xaml绑定中的灾难性故障

我正在开发Windows 10 Universal App。 我的代码如下: XAML: 和代码背后: namespace MyProject { public sealed partial class BlankPage1 : Page { public BlankPage1() { DataContext = new[] { new { X = 50.0, Y = 100.0 }, new { X = 220.0, Y = 170.0 } }; InitializeComponent(); } } } 不幸的是,矩形没有显示在窗口中。 我收到编译错误: Catastrophic failure (Exception from HRESULT: […]

将嵌套列表绑定到WPFcanvas面板

我想知道是否有可能以某种方式将列表列表绑定到cavas面板。 例如,具有对象“层”,其本身是“矩形”对象的列表。 是否可以将图层列表绑定到canvas? 到目前为止,我只能通过将一个扁平的嵌套列表(使用SelectMany函数)绑定到一个itemcontrol来实现它,但这不够好,我想保持“图层”分开,并使矩形的Zindex根据不同而不同它所在的层,允许轻松地重新排序图层。 我也尝试过嵌套的itemcontrols,但正如预期的那样它只显示第一层。 目的是为canvas上每个图层中的每个对象绘制一个矩形,允许图层操作,在每个图层中插入新对象等等…… 提前致谢! 🙂

从canvas保存的图像无法正确呈现

我正在尝试使用以下代码将myCanvas的内容保存为库中的图像文件(对于Windows Phone 8.1,而不是Silverlight)。 当我运行应用程序时,图像被保存但是它被扭曲了。 我究竟做错了什么? 我上传了结果图像和预期结果。 public async void SaveFileToPhone() { var file = await KnownFolders.PicturesLibrary.CreateFileAsync(“bug.png”, CreationCollisionOption.GenerateUniqueName); await SaveVisualElementToFile(myCanvas, file); } async Task SaveVisualElementToFile(FrameworkElement element, StorageFile file) { var renderTargetBitmap = new RenderTargetBitmap(); await renderTargetBitmap.RenderAsync(element, (int)element.Width, (int)element.Height); var pixels = await renderTargetBitmap.GetPixelsAsync(); txt_bug.Text = “Width: ” + (int)element.Width + ” Height:” + (int)element.Height; using (IRandomAccessStream […]

在Windows窗体中等效的canvas

我正在创建一个简单的应用程序,以显示多个图像一个接一个。 在WPF中,我使用了相当于图像数量的canvas数量,并将这些canvas添加到主canvas中。 在每个canvas中使用Image控件,我和我一起上传了图像,看起来很不错。 现在,我试图在Windows窗体中执行相同的操作。 我尝试使用Panel(作为WPF中的主canvas)并使用Panel_Paint事件在其上绘制图像。 没事。 但是我需要添加一些内容(因为我在WPF中添加了多个canvas),但是没有任何攻击。 我计划了几个小组,但他们都需要Panel_Paint来绘制图像。这是一些难以维护的……还有其他想法吗?

WPFcanvas性能 – children.add多次调用

我在很长的canvas上绘制了很多线条(想想条形图)并且使用低级几何类并冻结它们等性能调整得相当好。这显着改善了性能,但仍需要几秒钟将几千个项目加载到canvas中。 我对应用程序进行了性能分析,看起来每次调用canvas.children.add()时占用了很大一部分时间。 我已经读过这应该是一个轻量级的调用,因为我在一个方法中多次调用它,它不应该试图在中间做任何重的事情……可能有任何其他原因这可能会采取如此多的时间? 我可以用任何方式加快速度吗? 性能并不可怕,但我担心以后当我需要处理更大的数据集时,它可能会成为一个更大的问题。 仅供参考,在此示例中看起来它被称为1400次,并且它在现代/快速笔记本电脑上花费了近3秒的CPU时间。 canvas虽然包含在其他控件的层次中,所以我很好奇他们是否可能对此做出贡献。 额外注意:我也没有在canvas上设置特定高度,因为它设置为填充网格父容器。 这可能是问题的根源吗?