【问题标题】:Need help converting custom C# Windows forms controls to custom C# Universal Windows Platform controls需要帮助将自定义 C# Windows 窗体控件转换为自定义 C# 通用 Windows 平台控件
【发布时间】:2020-02-19 22:37:43
【问题描述】:

我正在将 C# Windows 窗体应用程序转换为 C# 通用 Windows 平台 (UWP) 应用程序。在这个应用程序中,有一些自定义控件使用 Paint 事件来添加处理程序方法。在此处理程序中,您将获得一个 PaintEventArgs 对象,并从那里获得一个可以进行绘图的 Graphic 对象。我需要在 UWP 中做同样的事情,但我还没有找到在 UWP 中获取 Graphic 对象的方法。

就我所见,您只能通过组合平台提供的其他控件并设置其参数来在 UWP 中创建自定义控件。但这对我的应用程序来说还不够。我需要一个 Graphics 对象来进行精确绘图。有没有办法在 UWP 中获取此 Graphics 对象?我知道使用 MSIX 包工具,您可以从 Windows 窗体应用程序为 Windows 应用商店创建安装程序,但我希望我的应用程序直接在 UWP 中。

另外,我知道在 Android 中,即使也是基于 XAML 的,也可以在 java 中扩展 View 类并覆盖 OnDraw 方法。 Window UWP 中有没有等价的东西?

使用 Visual Studio,C#windos 窗体代码示例如下:

partial class MyCustomButton
{
    ...

    private void InitializeComponent()
    {           
        ...
        this.Paint += new System.Windows.Forms.PaintEventHandler(this.MyCustomButton_Paint);
    }

 }

public partial class MyCustomButton : Button
{
    public MyCustomButton()
    {
        InitializeComponent();
    }

    private void MyCustomButton_Paint(object sender, PaintEventArgs e)
    {

        Graphics g = e.Graphics;

        ...

        /// Drawing on g

    }

}

是否可以在 UWL 中完成类似的操作,即使它是基于 XAML 的?可以获取 Graphics 对象吗? (我知道在 Android 中我是可能的)。


由于收到的 cmets,我将添加信息并尝试更具体。我们要更新的 C# Windows.Form 应用程序是一个用于绘制和编辑特定工程流程图表的工具。它在 UserControl 类的子类中计算点并绘制线,特别是在 Paint 事件的处理程序中。当我更新到 UWP 时,我想重用所有这些计算和代码,但在我看来,只有在可以绘制图形对象时才能完成。这就是为什么我想知道这个 Graphic 对象是否可以在 UWP 中获得,如果不能,我想要一些关于如何重用 C# Windows.Form 版本应用程序中已经存在的所有绘图代码的指导.感谢所有回复。

【问题讨论】:

  • 这可能可能的。然而:你真的想走那条路吗?依赖图形容器非常麻烦。
  • 最好告诉我们您要寻找的最终结果。 WPF/UWP 有 90% 的机会有更好的数量级。 |另外我认为我应该说 .NET Core 3.0 将在 WindowsForms 支持下发布。要将框架项目转移到 Core 3.0,有一个转换工具。
  • 谷歌“xaml 创建自定义按钮”以获得成功。
  • 是的,这在 XAML 中是可能的。你有一个具体的问题吗?你都尝试了些什么?通常在 XAML 中创建自定义控件而不进行自定义绘图要容易得多。
  • 请阅读我添加到问题中的编辑

标签: c# .net winforms uwp


【解决方案1】:

System.Drawing 命名空间中的Graphics 类与Win2D 的CanvasDrawingSession 类类似。通过将 Win2D NuGet 包添加到您的项目,Win2D 可用于 UWP 应用程序。

有一个类似的thread,可以参考。我按照official site 的代码示例添加图形,效果很好。所以你可以尝试使用使用 Win2D 库来实现相同的功能。

【讨论】:

  • 这就是我要找的。谢谢。
猜你喜欢
  • 2015-01-18
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多