我有一个SQL数据库,其中包含许多定期更新的数字和文本值。这些数据点的确切编号/类型/名称可以根据数据库写入的源而改变。
我想创建一个用户界面编辑器,用户可以在其中将数据库点添加到UI并进行排列并根据需要设置其格式。如果将新点添加到数据库,则他们可以右键单击UI并说“添加此点”,然后从数据库点列表中进行选择。
我正在寻找一些关于在哪里开始创建此编辑器应用程序的指针,使用XAML在运行时动态创建std WPF控件可以做些聪明的事情吗?
道格
抱歉,按数据库点来说,我仅表示数据库中代表要在ui中显示的项目的行。
雷/舒坦特,
感谢您抽出宝贵的时间回答问题,我将同时介绍这两种方法。
硅
最佳答案
这是一种简单的方法:
创建一个DataPoint类,包括“名称”,“类型”和“值”字段
创建一个DataPointView UserControl,它公开Name属性和只读DataPoint属性。设置名称属性后,从数据库中加载DataPoint。 (可选)使用计时器定期重新加载DataPoint(或订阅数据库中的更新通知)。
创建一个从Window派生的UIEditor类,该类公开一个CurrentForm属性,该属性最初是空白的Canvas
添加用于ApplicationCommands.Open,ApplicationCommands.Save等的处理程序,以使用XamlParser和XamlWriter在磁盘(或数据库)上的文件中加载/保存布局。
在UIEditor XAML中,包括绑定到CurrentForm属性的ContentPresenter,以保存正在编辑的UI。还需要其他任何控件(“保存”按钮,“打开”按钮,调板等)。
在DataPointView的XAML中,显示数据点的名称和值。
在您的UIEditor类中,订阅鼠标预览事件OnPreviewLeftButtonDown等。每当鼠标移动事件在DataPointView上的鼠标按下事件之后,捕获鼠标并开始调整DataPointView的Left和Top坐标-这使用户可以在DataPointView周围拖动DataPointView。帆布。
在您的DataPointView的XAML中,包括一个ContextMenu,将其ItemsSource绑定到“ {Binding AvailablePoints,RelativeSource = {RelativeSource FindAncestor,my:UIEditor,1}}”,并确保UIEditor类的AvailablePoints属性返回名称为MenuItems的列表。可用数据点和适当的命令作为命令参数。
在上下文菜单中绑定命令的处理程序中,将新的DataPointView添加到CurrentForm Canvas中,并从CommandParameter中指定的名称中设置其Name。
在DataPointView对象上设置Focusable = true,并通过删除已聚焦的DataPointView来处理ApplicationCommands.Delete。
编写以下代码:
您可以通过显示UIEditor窗口来允许用户编辑UI。
您可以通过简单地使用Application.LoadComponent从磁盘加载UI并将其显示在窗口中来显示没有编辑功能的UI。
关于c# - 在WPF中创建自定义用户界面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2819433/