- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
尝试为一些 WPF 元素创建可视化工具,包括 DrawingImage
和 UIElement
等。creating a visualizer很简单,我的可视化工具总是抛出异常,即目标对象类型(DrawingImage
和 UIElement
)未标记为可序列化。
进一步阅读表明我需要实现 VisualizerObjectSource
来提供自定义序列化。此类被指定为 DebuggerVisualizer
属性中的参数之一。我按照这些步骤操作,现在我的自定义序列化器被调用了,但我真的不知道在那里做什么。这是被调用的相关函数:
public override void GetData(object target, Stream outgoingData)
{
var writer = new StreamWriter(outgoingData);
writer.WriteLine(/*???*/);
writer.Flush();
}
不完全理解它对我的期望(UIElement
的二进制序列化版本?)以及我该如何编写 UIElement
或 DrawingImage
到传出流。以前有人这样做过吗?
最佳答案
终于成功了。这比我想象的要简单得多。对于任何其他试图找到自己的方式的人,这里是它的工作原理:
首先,GetData()
覆盖(阅读问题)将由您管理。您必须决定要发送给可视化工具的内容。发送足够的信息,以便您能够在 Show()
调用中构造对象。
对于 WPF 元素,序列化证明比我想象的要简单得多。您可以使用内置的 XamlReader
和 XamlWriter
类来执行 WPF 对象的序列化/反序列化。
一旦您在 Show()
中重建了对象,只需在 Form
中显示它即可。请注意,Visual Studio 仅支持老式 Form
和 Control
类(即 WinForms),不支持 WPF Window
,但您可以解决此问题通过在表单或控件中放置一个 ElementHost
,然后将重构的 WPF 对象分配为此 ElementHost
的子对象来解决问题。
您可能希望在 ElementHost
和重构对象之间添加一个 ViewBox
层,以使其优雅地适应可用空间。
我已经上传了 WPFVisualizers project on GitHub以防万一有人感兴趣。目前它包含两个可视化工具,用于 DrawingImage
和 UIElement
类型。这些一起涵盖了 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/
我正在尝试获得一个按钮,按下该按钮时会改变颜色。当再次按下时,它应该变回原来的颜色。我究竟做错了什么? 我的模板中的按钮: export default { data: {
我是一名优秀的程序员,十分优秀!