C#/ .NET:在C#中创建动态视觉效果

时间:2009-11-24 03:59:00

标签: c# .net wpf winforms user-interface

注意:我不确定如何标题或标记此问题,所以如果您有任何想法,请帮助!

我目前正在设想一些可能涉及动态渲染某些内容的项目(无论是关于工作人员的点,线,文本或音乐笔记,还是假设的例子),但是,如果我要进行这些项目,我不确定如何处理这种设计。我很好奇的是像Word,Geometer的Sketchpad或Finale这样的程序,分别创建一个空白的“画布”并在其上渲染文本,几何或音乐 - 如何在C#中完成,或在.NET中,一般

首先,使用的最佳框架/平台:WinForms,WPF,还有什么?我愿意接受很多选择,因为我只是想了解不同的方法。

接下来,如何使用您为第1部分回答的不同框架创建这样的“画布”(如果我们回到那个隐喻)?而且,我怎样才能把东西渲染到它上面?

我希望我的问题不会太混乱或者说n00bie。我只是不知道如何处理这样的前景。谢谢!

更新:我的now posted a follow-up question不太广泛。我提供了一个我想要完成的假设的例子。但是,即使我的问题没有得到完全解答,我仍然会在这里接受答案。

4 个答案:

答案 0 :(得分:2)

WPF可能很适合您的项目。我喜欢C#2008中的Pro WPF一书:Windows Presentation Foundation with .NET 3.5,它涵盖了您所询问的大部分主题。

通过更集中的问题,你可能会得到更好的答案。您的问题范围太大,无法轻松或简洁地回答。

答案 1 :(得分:1)

通过在简单绘制简单形状和控件内容之间轻松移动形状绘制代码,WPF可以更轻松地重构此类项目的设计。如果您需要丰富的自定义控件,WPF可以实现相当平滑的过渡。

大多数图形都可以在XAML中定义,这意味着您可以通过IllustratorSVG-XAML converter等程序或任何生成标准SVG矢量图形的程序中导出它们。

我喜欢WPF Unleashed,它对2D图形有很好的讨论,以及如何将DrawingContext类用于这样的可视化编辑器。

答案 2 :(得分:1)

你知道有一个名为Paint的事件吗?每次Windows操作系统需要在表单上显示或重新绘制某些内容时,都会触发此事件。因此,您创建了一个Paint事件处理程序,其中一切都是可能的。例如:

  • Word:您有一个带有格式化标签和内容的WordDocument数据结构,您可以使用所需的画笔/颜料和字体逐个绘制每个字符/每个单词或每个单词块。您可能还想绘制背景和内容...例如,如果用户更改了1个特定块的字体,则您的WordDocument必须更改某些内容以反映该字体更改。然后你做一个myForm.Invalidate()重绘你的表单(从而更新你的字体)。 => 动态更新您的GUI。

  • Sketchpad:你需要数据结构,如Line,Point,Triangle等。然后,每次触发OnPaint时,你都会动态地绘制它 。例如:myGraphics.DrawLine(..),myGraphics.DrawCircle(..)

  • 与Finale相似。

你应该做的一件事是仔细处理你的数据结构和绘图类,而不是在你的OnPaint()方法中绘制所有东西,你在实体类中创建几个DrawMe(..)方法,并要求他们绘制他们自己。例如:myCircle.DrawMe(..),myScore.DrawMe(..)

希望有所帮助, 本

答案 3 :(得分:0)

你的问题没有普遍的答案 - 它太通用了。

您是在谈论动态创建的控件,标准UI组件(下拉菜单,按钮)吗?

它是矢量图形 - 就像在绘图中,或者可能是2D图像处理 - 还是3D?