【问题标题】:Offer templating functionality in a WPF application - how to?在 WPF 应用程序中提供模板功能 - 如何?
【发布时间】:2011-10-25 06:14:22
【问题描述】:

我有一个梦想:

我正在开发一个笔记应用程序,每个人都可以在其中存储笔记并标记它们。现在,如果用户可以将应用程序用于多种目的,那就太好了:存储书籍信息、食谱、清单等......

Book-information template http://dl.danielgilbert.de/templatetable.png

这里有一个图书信息模板。我可以想象标题框下方的模板选择器,您可以在其中选择模板以有组织的方式输入信息。但我被困住了。

  • 您将如何实际“加载”或“创建”这样的模板?
  • 您将如何存储输入的数据?
  • 如何在文本字段中启用基本格式选项?
  • 最后:我需要一个不可编辑的概览模板,其中填充了在编辑模式中输入的数据。

我知道,这不是一个简单的问题,但也许有一些不错的想法。 :)

【问题讨论】:

  • 你知道模板的“宇宙”还是应该允许用户创建新模板?
  • 您需要为每个实体(书籍、笔记、...)提供一个模板还是多个?用户可以创建新实体吗?
  • 我认为ContentControl.ContentTemplateContentControl.ContentDataTemplate.DataType 和 MVVM 将为您提供您所寻求的。 japf.fr/2009/03/…
  • @MartinLiversage 不,用户应该能够创建新模板。并感谢您嵌入图像。 :)
  • @Ivan.Benko 不,我需要为每个实体创建一个模板。而且我仍在寻找一个聪明的解决方案来保存一切。

标签: c# wpf templates


【解决方案1】:

您可以使用反射和自定义属性。

我在我的 wp7 应用程序中实现了类似的功能(但没关系,xaml 无处不在)。

想法是创建可以显示任何实体的超级视图(控件)。为每个实体类创建,代表这个实体,并为这个类的属性添加自定义属性(告诉超级视图如何显示实体) 超级视图应该分析这些属性并构造视图。

这是part of my project

希望这些信息对您有所帮助。

【讨论】:

  • 好的,所以您将创建一个自动使用实体的视图。这是一个非常巧妙的想法! :) 但是,普通用户很难创建自己的“自己的”模板。也许我应该在运行时通过 XAMLReader 加载 XAML 模板,并且 - 当用户保存它时 - 序列化整个模板,包括它的值。
  • @DanielGilbert,在我的项目中,我使用它来编辑简单对象,而无需为其创建许多 xaml 页面(例如用户设置)。这只是你的想法,不是解决方案..
  • 没关系,正如我已经说过的,它非常漂亮和聪明。真的。 ;) 但我想,这对于普通的最终用户来说太复杂了。我会做更多的头脑风暴......
【解决方案2】:

好的,

显然,实现我想要的非常简单:如果您在控件中输入任何内容,如果您使用 XamlWriter,它将被序列化。我可以存储序列化的 Xaml 并在加载注释时将其读回。所以,最后,用户最终会得到一个文件,他在其中输入一些标记,例如:

<CheckBox >test</CheckBox>
<Label>Huhu</Label>
<TextBox Foreground="Gray">This is a test...</TextBox>
<Label>Huhu</Label>
<TextBox Foreground="Gray">This is a test...</TextBox>

并且在编辑屏幕中,整个标记将使用它的值进行序列化。

但是,这样做的缺点是一旦分配就无法更改模板,或者如果基本模板更改,则无法更改布局。也许我会知道如何实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 2020-12-31
    • 2011-02-17
    • 2018-06-09
    • 2017-06-12
    • 2017-07-03
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多