在WPF中创建自定义用户界面

时间:2010-05-12 13:55:58

标签: c# wpf xaml user-interface

我有一个SQL数据库,其中包含许多定期更新的数值和文本值。这些数据点的确切数量/类型/名称可能会根据数据库写入的来源而改变。

我想创建一个用户界面编辑器,用户可以在其中向UI添加数据库点并根据需要对其进行排列和格式化。如果向数据库添加了新点,他们可以右键单击UI并说“添加此点”并从数据库点列表中进行选择。

我正在寻找关于从哪里开始创建这个编辑器应用程序的一些指示,可以使用XAML在运行时动态创建std WPF控件吗?


道格

道歉,按数据库点我只是指数据库中代表要在ui中显示的项目的行。


Ray / Sushant,

感谢您抽出时间回答,我将采用这两种方法。

的Si

2 个答案:

答案 0 :(得分:3)

这是一种简单的方法:

  1. 创建一个DataPoint类,包括“名称”,“类型”和“值”字段
  2. 创建一个DataPointView UserControl,公开Name属性和只读DataPoint属性。设置Name属性后,从数据库加载DataPoint。 (可选)使用计时器定期重新加载DataPoint(或订阅数据库中的更新通知)。
  3. 创建一个从Window派生的UIEditor类,它暴露一个最初为空白Canvas的CurrentForm属性
  4. 为ApplicationCommands.Open,ApplicationCommands.Save等添加处理程序,以使用XamlParser和XamlWriter从/向磁盘(或数据库)上的文件加载/保存布局
  5. 在您的UIEditor XAML中,包含一个绑定到CurrentForm属性的ContentPresenter,以保存正在编辑的UI。还需要任何其他控件(保存按钮,打开按钮,调色板等)。
  6. 在DataPointView的XAML中,显示数据点的名称和值。
  7. 在您的UIEditor类中订阅鼠标预览事件OnPreviewLeftButtonDown等。每当鼠标移动事件跟随DataPointView上的鼠标按下事件时,捕获鼠标并开始调整DataPointView的Left和Top coordintates - 这允许用户拖动Canvas周围的DataPointView。
  8. 在DataPointView的XAML中,包含一个ContextMenu,其ItemsSource绑定到“{Binding AvailablePoints,RelativeSource = {RelativeSource FindAncestor,my:UIEditor,1}}”,并确保UIEditor类的AvailablePoints属性返回一个列表MenuItems,包含可用数据点的名称,以及适当的命令和命令参数。
  9. 在上下文菜单中绑定命令的处理程序中,将新的DataPointView添加到CurrentForm Canvas,并从CommandParameter中给出的名称设置其名称
  10. 在DataPointView对象上设置Focusable = true,并通过删除聚焦的DataPointView来处理ApplicationCommands.Delete。
  11. 编写此代码:

    • 您可以通过显示UIEditor窗口来允许用户编辑您的UI。
    • 只需使用Application.LoadComponent从磁盘加载并在窗口中显示,即可显示没有编辑功能的UI。

答案 1 :(得分:0)

在.NET 3.5中使用WPF DataGrid作为WPF ToolKit,或者它是.NET 4.0的标准。它具有以下特点:

  1. 高度可自定义的数据列
  2. 使用可以保留的可编辑行
  3. 可以动态添加/删除/重新排列列。
  4. 可以直接从数据库加载列名称
  5. 还有更多。

    我认为那将是完美的。

    如果有帮助,请标出答案。感谢。