gpt4 book ai didi

c# - WPF 元素的可视化工具

转载 作者:行者123 更新时间:2023-11-30 12:22:47 26 4
gpt4 key购买 nike

尝试为一些 WPF 元素创建可视化工具,包括 DrawingImageUIElement 等。creating a visualizer很简单,我的可视化工具总是抛出异常,即目标对象类型(DrawingImageUIElement)未标记为可序列化

进一步阅读表明我需要实现 VisualizerObjectSource 来提供自定义序列化。此类被指定为 DebuggerVisualizer 属性中的参数之一。我按照这些步骤操作,现在我的自定义序列化器被调用了,但我真的不知道在那里做什么。这是被调用的相关函数:

public override void GetData(object target, Stream outgoingData)
{
var writer = new StreamWriter(outgoingData);
writer.WriteLine(/*???*/);
writer.Flush();
}

不完全理解它对我的期望(UIElement 的二进制序列化版本?)以及我该如何编写 UIElementDrawingImage 到传出流。以前有人这样做过吗?

最佳答案

终于成功了。这比我想象的要简单得多。对于任何其他试图找到自己的方式的人,这里是它的工作原理:

首先,GetData() 覆盖(阅读问题)将由您管理。您必须决定要发送给可视化工具的内容。发送足够的信息,以便您能够在 Show() 调用中构造对象。

对于 WPF 元素,序列化证明比我想象的要简单得多。您可以使用内置的 XamlReaderXamlWriter 类来执行 WPF 对象的序列化/反序列化。

一旦您在 Show() 中重建了对象,只需在 Form 中显示它即可。请注意,Visual Studio 仅支持老式 FormControl 类(即 WinForms),不支持 WPF Window,但您可以解决此问题通过在表单或控件中放置一个 ElementHost,然后将重构的 WPF 对象分配为此 ElementHost 的子对象来解决问题。

您可能希望在 ElementHost 和重构对象之间添加一个 ViewBox 层,以使其优雅地适应可用空间。

我已经上传了 WPFVisualizers project on GitHub以防万一有人感兴趣。目前它包含两个可视化工具,用于 DrawingImageUIElement 类型。这些一起涵盖了 WPF 世界的大部分视觉元素,但您可以根据需要自由添加更多类型。该项目包含 VisualizerBase 类,其中包含所有可视化工具序列化/通信逻辑。这使得创建新的 WPF 可视化工具就像编写 1 行代码一样简单,如下所示:

public class GeometryDrawingVisualizer : VisualizerBase<GeometryDrawing, GeometryDrawingControl>
{
}

就是这样。您已经为 GeometryDrawing 类型创建了一个新的可视化工具。第二个通用参数(上例中的 GeometryDrawingControl)是将构成您的 UI 的 WinForms Control(或 Form,如果您愿意)可视化工具。在您的控件中放置一个 ElementHost,然后放入您需要呈现的任何类型。

关于c# - WPF 元素的可视化工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com