关于c#:如何在WinForms中实现丰富的UI?

How to implement a Rich UI in WinForms?

我想为我的桌面应用程序创建一个丰富的 UI,但是 WPF 对我的需求来说太复杂了,我更喜欢使用 WinForms(如果可能的话)。在我看来,有两种选择:

  • WinForms 和大量的自定义控件,包括自定义绘图:这会给我提供细粒度的控制,但是,UI 编码太硬,并且会使重新设计(甚至是初始实现)成为一件漫长而乏味的事情。

  • WebBrowser 控件中的 HTML5 UI:我非常倾向于这个选项,因为界面可以很容易地(重新)设计,并且实现需要的代码更改最少。话虽如此,我没有这方面的经验,也不知道我可能遇到的潜在问题。

  • 你们怎么看?还有其他建议吗?我还没有完全排除 WPF,如果 WinForms 出了,那么 WPF vs WebBrowser Control 怎么样?

    Design


    对于桌面应用程序,WPF 无疑是最佳选择,因为它提供了使用 StyleControlTemplate 完全重新设计控件的能力。

    以桌面版 Skype 为例。据我所知,它实际上是一个基于 XAML 的桌面应用程序 (WPF),这意味着设计丰富、漂亮的应用程序当然是可能的,因为它已经完成了。 Visual Studio 也是基于 XAML 的应用程序的一个很好的例子。

    在您的情况下,我建议您在定位桌面时使用 WPF 路线。已经创建了许多非常棒的框架来帮助您的应用程序看起来更棒,例如 MahApps 和 MUI,它们都试图实现 Windows 8 应用程序的现代感。

    这些框架的本质是实现 Styles 和 ControlTemplates 来覆盖现有控件的默认样式和模板。我确定加入了新的控件,但本质仍然保持不变。

    Button 为例,使用StyleControlTemplate 很容易改变按钮在窗口上的显示方式。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Style TargetType="Button">
        <Setter Property="Background" Value="Red"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border BorderThickness="0"
                            Background="{TemplateBinding Background}">
                        <ContentPresenter Margin="20,10"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    在这个非常简单的示例中,我只是更改了默认的 Button 样式并更改了它的呈现方式,以显示红色 Border 内的按钮内容。这不是很复杂,但是你有很大的自由度,你几乎可以做任何你真正喜欢的事情。

    我听说过使用 WPF 构建的游戏,显然不是 AAA 游戏,而是相对简单的桌面游戏,但是它们使用与我提到的相同的原则来设计控件以满足他们的需求。

    一旦你了解了如何重新设计控件,那么可能性实际上是无穷无尽的,如果你正在寻找设计灵感,那就看看 dribbble。