我是WPF的新手,为了获得一些知识,我决定制作一个非常简单的UML建模程序,基本上可以将一些类放到画布上,连接它们并移动它们。
现在问题: 我一直在考虑让我在画布上放置的类是我设计的userControl。在我看来,它会像Grid一样,有一些文本框来表示属性,属性等等。那么实际的问题是,我的想法是否可能,或者我应该选择完全不同的东西?我现在关心的是如何实现网格,以便它可以在我想要的时候在右边标题(属性/属性..)下展开(添加一行),而不是从头开始扩展到最大值。
我希望你能理解我的问题,并让我知道我是否应该继续实施我的想法,或者使用其他方法来实现。
答案 0 :(得分:1)
您可能希望考虑一个ListView控件,可能使用Expander,如下所示:
<Canvas>
<Expander Header="Stuff"
MaxHeight="900"
Canvas.Left="202"
Canvas.Top="110">
<ListView Name="MyListView">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Add new thing"
Click="MenuItem_Click" />
</ContextMenu>
</ListView.ContextMenu>
<ListViewItem>
<StackPanel Orientation="Horizontal">
<Label>Name</Label>
<TextBox Text="Value" />
</StackPanel>
</ListViewItem>
<ListViewItem>Item two</ListViewItem>
<ListViewItem>Item three</ListViewItem>
</ListView>
</Expander>
</Canvas>
这将根据需要确定最大值。列表视图项可以包含任何类型的内容(不仅仅是文本),如上所示。您将需要了解有关样式和控件模板的一些信息。 WPF有一个相当陡峭的学习曲线,但网上有很多学习资源。祝你好运。
在回复您的评论时,我正在添加其他信息。
您可以在XAML中执行的任何操作都可以在代码后面执行(主要是XAML只调用框架对象)。在这种情况下,我已经为ListView控件添加了一个上下文菜单。此菜单包含一个项目“添加新事物”。此项目有一个Click事件,该事件绑定到后面的代码中的MenuItem_Click方法。然后我将此方法添加到代码中:
void MenuItem_Click(object sender, RoutedEventArgs e) {
var lvi = new ListViewItem();
lvi.Content = String.Format("New thing {0}", DateTime.Now);
MyListView.Items.Add(lvi);
}
现在,如果右键单击ListView,您将看到“添加新事物”菜单选项,左键单击它会将新的ListViewItem添加到ListView中(以编程方式)。