问题标签 [drawingvisual]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 尝试学习 DrawingVisual 和 StreamGeometry
在我的应用程序中,我必须绘制一条包含很多点的线(如果需要,最多可达 100.000)。最初我使用的是折线,但对于大量的点来说这太慢了。
我一直在做一些阅读并来到 DrawingVisual 和 StreamGeometry 但是它不起作用。
我遵循了一个简单的教程并创建了以下类:
我需要的线的所有点都在名为 Punten 的 PointCollection 中。然后我尝试将此 FrameworkElement 添加到我的画布中。
其中“ActieveCanvas”是画布。
有关信息:所有点都是画布内(相对于)的 X、Y 坐标。
我究竟做错了什么?
c# - 如何将图像转换为图像源
我什至不知道我是否问对了问题;所以提前道歉。我正在将一些 PNG 写入画布,并且我还想同时将这些 PNG 复制到位图。我希望 PNG 出现在位图上与画布上相同的位置。
这是代码片段:
但是,它会在此行引发错误“无法从'System.Windows.Controls.Image'转换为'System.Windows.Media.ImageSource':
如果我能以某种方式将图像转换为 ImageSource,这个错误会得到解决吗?或者我做错了?
谢谢!
wpf - WPF 键盘事件不会为仅具有视觉效果的 FrameworkElement 子类触发
我创建了一个包含 Visuals 集合的 FrameworkElement 子类:
我使用以下代码在 XAML 中显示此元素:
我已经尝试了我能想到的一切,但我就是无法触发 KeyDown 事件。我在网上找到的最常用的评论与焦点有关。我已经尝试了 Focusable="True" 和调用 this.Focus() 的所有组合,但没有任何效果。
任何人都知道如何做到这一点?谢谢!
wpf - Windows 更新 KB4040972/73 导致带有 WPF 类的黑色图像
我有一个应用程序依赖于我们使用 DeepZoomTools.dll 的深度缩放图像(从 PNG 转换为各种比例的 JPG 金字塔)。这依赖于 PresentationCore.dll 并且多年来一直运行良好。
在推出 KB4040972 和 KB4040973 之后,从 PNG 到 JPG 的转换会生成(取决于坐标)黑色图像,而不是它应该包含的图像。
如果以下代码在控制台或桌面应用程序中运行,则它可以工作。
只有在高权限系统帐户下运行(例如,来自任务调度程序)时,它才不起作用。
我创建了一个项目来重现该问题,代码如下:
有什么线索吗?
c# - WPF DrawingVisual中跟踪DrawingVisual的方案
我正在 WPF 中创建一个 CAD 程序,用于添加和删除线条和矩形,这两者都由 PathGeometry 描述。当我进一步了解该程序时,它将包含大量不同的 PathGeometries,每个 PathGeometries 都构成了各个 DrawingVisuals 的属性。出于性能原因,我使用 Visual 类。
由于每个 DrawingVisual 实际上是相同的,因为它只是一个由 PathGeometry 组成的 DrawingVisual,它没有唯一标识符。我需要某种标识符,这样当我右键单击一条线或矩形时,我可以在其上绘制一些句柄,以便使用鼠标对其进行修改。(我希望线的端点是可移动的,矩形是可拉伸的,等等。)有关于 Lines、Bezier 曲线等的句柄线的示例,但它们不处理具有不同的问题类型。
在下面的代码中,就像我的一样,鼠标点击检索drawingVisual对象。但是,由于drawingVisuals 上没有任何特殊功能,即“这是一个矩形”或“这是一条线”,我需要找出一种从HitTestResult 结果中获取该信息的方法。知道了这一点,当我想修改它时,我可以确定如何处理它。一条线将有 2 个控制点,一个矩形将有 4 个,而我的一些其他(尚未制作)几何图形将有 6 个或更多控制值。
当我以调试模式(通过 Debug>Window 访问)进入 visualTree 时,它只显示“DrawingVisual”。这些信息不足以知道如何将其视为一条线或一个矩形。
因此,在大型 CAD 程序中,它们允许您修改单击的对象。该软件有某种方式知道您点击了什么,我希望在我的初学者级 CAD 程序中拥有该功能。
我尝试使用调试功能并寻找某种唯一标识符,但找不到。我考虑过使用 List 并在创建每个项目时给出它,但我无法将它与 HitTestResult 结果链接起来。
可以做到,所以这不是问题,但我需要一个方案来模仿 CAD 程序如何完成此功能。
告诉我如何去做的任何帮助将不胜感激。基本上,高性能 CAD 程序使用什么方案来跟踪鼠标点击的 Visual 类型是什么?
TYIA
c# - 对象层次结构中的层次结构更改通知
我在 C# 库中有三种对象的递归层次结构。我们称它们为Boxes、Nuts and Bolts。 Boxes可以包含其他Boxes或Nuts and Bolts。 Nuts and Bolts显然不能包含任何东西。
假设每个Box都有Box、Nut和Bolt的ObservableCollections。每个Nut and Bolt实现INotifyPropertyChanged。
是否有公认的最佳实践将可观察集合的更改通知或任何Nut或Bolt上的属性更改传播到包含对最顶层Box的引用的对象?或者您会推荐任何特定的设计模式?
编辑:为了给这个问题提供一些背景信息,我领导了Chemistry for Word项目。您可以在左侧看到实时显示结构的组件。 现在,不管你信不信,这目前通过数据绑定来绘制所有内容。LHS 上显示的每个分子都是一个 ItemsControl。(是的,我正在将 WPF 与 MVVM 一起使用!)事实证明,这对于长期解决方案来说开销太大且缺乏灵活性。所以我又回到了直接生成DrawingVisuals。这种方法允许更精细的控制。我最初的例子中的盒子、螺母和螺栓是分子,原子和债券。如果添加、删除或更改其中任何一个,则显示器必须知道它,以便它可以更新。因为我已经实现了数据绑定的接口和对象,所以我想利用我已经拥有的代码。
c# - 如何计算 DropShadowEffect 的大小?
我正在尝试获取图像并对其应用阴影并另存为图像。
到目前为止,在不使用第三方解决方案的情况下,唯一的方法是使用DropShadowEffect
in a DrawingVisual
:
我不知道检测给定的所有边的确切像素偏移所需的数学DropShadowEffect
。
有没有内置的方法来测量它,还是我应该手动测量?怎么可以手动完成?
c# - 如何将 WPF FrameworkElements 和 DrawingVisuals 添加到同一画布
我正在构建一个简单的 CAD 程序。出于速度目的,我使用的是 DrawingVisuals。为了促进这一点,我创建了一个继承自 Canvas 的自定义 Canvas 类。我在这个类中覆盖了 VisualChildrenCount 和 GetVisualChild
我在我的应用程序的 ScrollViewer 控件中显示此画布。我的问题是我还希望能够将不同的 FrameworkElements 添加到我的画布中。我试过在我的画布代码中做这样的事情:
但我的画布上什么也没有。如果我注释掉视觉覆盖,它可以正常工作并将文本框添加到我的画布中。我在这里错过了什么吗?我是否需要重写其他方法才能让 FrameworkElements 工作?我不应该将 FrameworkElement 添加到 Children 集合并将其添加到视觉对象吗?
谢谢
wpf - 如何以编程方式调整 DrawingVisual 的大小?
所以,我是 WPF 绘图的新手。出于性能原因,我不得不从 ContentControl 和 UserControl 等常规控件切换到更轻量级的元素,例如 DrawingVisual。我正在开发一个图表应用程序,它可能在画布上最多有 1000 个元素,可以拖动、调整大小等。首先,使用 DrawingVisual 代替 Shape 更好吗?其次,我的主要问题在这里。我正在向 Canvas 添加 DrawingVisual 元素,如下所示:
在画布内:
如何通过代码动态增加 Rectangle 的大小?我尝试设置 Rectangle 的高度和宽度,但它不起作用,使用了 ScaleTransform,但这可能不是我想要的。我需要重新绘制矩形吗?谢谢!