C# 如何使您的XAML视图灵活且可供用户自定义?

C# 如何使您的XAML视图灵活且可供用户自定义?,c#,wpf,xaml,C#,Wpf,Xaml,我们的经理希望我们正在开发的WPF应用程序能够为用户完全定制。假设页面上有一个文本框。他希望用户能够将其放置在他想要的任何位置,使其具有他想要的任何颜色或字体大小,等等。现在的实现是将每个属性存储在SQL数据库中,然后在代码中构建视图 在我看来,这是一个糟糕的实现,因为它减慢了整个过程。当我浏览页面时,至少有10秒的加载时间,代码将获取所有属性,将它们转换为对象,将对象实现为视图,然后创建该视图。我想一定有更好的方法,因为它占用了太多的时间和资源。有更好的实现方法吗?有很多方法可以做到这一点,但

我们的经理希望我们正在开发的WPF应用程序能够为用户完全定制。假设页面上有一个文本框。他希望用户能够将其放置在他想要的任何位置,使其具有他想要的任何颜色或字体大小,等等。现在的实现是将每个属性存储在SQL数据库中,然后在代码中构建视图


在我看来,这是一个糟糕的实现,因为它减慢了整个过程。当我浏览页面时,至少有10秒的加载时间,代码将获取所有属性,将它们转换为对象,将对象实现为视图,然后创建该视图。我想一定有更好的方法,因为它占用了太多的时间和资源。有更好的实现方法吗?

有很多方法可以做到这一点,但是如果你需要“一切都可以改变”,那么。。有一种快速的方法可以做到这一点,即使没有任何外部工具

默认情况下,XAML被编译并包含在.exe/.dll中,但XAML可以从文件/字符串/任何内容动态加载。将XAML放在一个文本文件中(它已经存在),将编译选项更改为不编译它,而是包含为“content”和“copy always”,动态加载该文件()

现在用户可以编辑XAML,应用程序将监听它

当然:

  • 每次更改文件后,都需要重新加载/重新启动app/window/etc
  • 他们现在可以更改UI层中的所有内容
  • 他们必须正确编辑文件,他们可能需要一些基本的培训
  • <> LI>你的应用程序可能会变得更复杂,因为现在很难在UI上找到正确的控件,但是如果你使用VM和绑定和命令,那么你对这个问题本质上是安全的(如果你不使用这个方法,那么……考虑开始)
是的,我也是这么想的。但是我有点怀疑,但是你说服了我,这可能是最好的方法。我害怕去想那些可以编辑xaml的用户(无论是否接受过基本培训)。简单示例:ui元素有一个带有默认背景色的样式和一个触发器,该触发器在某些条件下更改背景色。然后,一个用户过来在ui元素上编写
Backround=“White”
,忽略样式。接下来发生的是100个关于触发器不工作的bug报告。另一方面,Visual Studio IDE是可定制环境的一个很好的例子(具有可移动和可固定的窗口以及一个很好的工具\Options\environment\Fonts and Color settings对话框)@ASh:当前的方法也可以这么说-只需想象用户编辑配置数据库并将按钮移动到位置(+34000,+23000)或设置背景:白色和文本颜色:白色烟雾。考虑到[管理者,谁]希望用户能够将[控制]放置在他想要的任何位置,使其具有他想要的任何颜色或字体大小等,这实际上是一种低成本、低努力的方式,如果他们真的希望这样做的话(他们的“用户”实际上可能有时间和技术技能,对吧?),或者让经理重新考虑他的方法和要求……此外,它消除了通过数据库处理所有定制的巨大复杂性,还允许像git这样的vcs轻松跟踪/分支定制,这对于(手动?)处理的基于数据库的存储来说是非常麻烦和容易出错的(可能是作为屏幕键值表保存的地方。)我去过那里,我见过它,除非花费大量精力为用户提供某种WYSIWYG ui编辑器,否则我实际上会选择这种方式(或类似方式,即他们可以编辑过滤/简化的xaml,然后将其加入/合并到原始用户中,等等,大量选项)