0

我对 WPF 很陌生,为了获得一些知识,我决定制作一个非常简单的 UML 建模程序,它基本上提供了将一些类放在画布上、连接它们并移动它们的可能性。

现在问题来了:我一直在考虑让我放在画布上的类成为我设计的 userControl。在我看来,它就像一个网格,带有一些文本框来表示属性、属性等。那么实际的问题是,我的想法是否可行,或者我应该采用完全不同的方式吗?我现在关心的是如何实现网格,以便它可以在我想要的时候在右标题(属性/属性..)下扩展(添加一行),而不是从一开始就扩展到最大。

我希望你能理解我的问题,并给我一个想法,我是否应该继续按照我的想法来实现它,或者使用其他方法来实现它。

4

1 回答 1

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 中单击鼠标右键,您将看到“添加新事物”菜单选择,左键单击它会在 ListView 中添加一个新的 ListViewItem(以编程方式)。

于 2013-09-29T13:53:25.203 回答