在WPF中扩展网格(或类似)以用于建模程序

时间:2013-09-29 11:40:35

标签: c# wpf grid implementation

我是WPF的新手,为了获得一些知识,我决定制作一个非常简单的UML建模程序,基本上可以将一些类放到画布上,连接它们并移动它们。

现在问题: 我一直在考虑让我在画布上放置的类是我设计的userControl。在我看来,它会像Grid一样,有一些文本框来表示属性,属性等等。那么实际的问题是,我的想法是否可能,或者我应该选择完全不同的东西?我现在关心的是如何实现网格,以便它可以在我想要的时候在右边标题(属性/属性..)下展开(添加一行),而不是从头开始扩展到最大值。

我希望你能理解我的问题,并让我知道我是否应该继续实施我的想法,或者使用其他方法来实现。

1 个答案:

答案 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中(以编程方式)。