2013-09-29 20 views
0

我對WPF很新穎,爲了獲得一些知識,我決定製作一個非常簡單的UML建模程序,它基本上提供了將某些類放到一個畫布,連接它們並移動它們。在WPF中爲建模程序擴展網格(或類似)

現在到的問題: 我一直在考慮讓我放在畫布上的類是我設計的userControl。在我看來,它會像Grid一樣,用一些文本框來表示屬性,屬性等等。那麼真正的問題是,我的想法是否可能,或者我應該採用完全不同的東西?我現在關心的是如何實現網格,使其可以在我想要的時候在正確的標題(屬性/屬性..)下展開(添加一行),而不是從一開始就擴展到最大值。

我希望你能理解我的問題,並告訴我是否應該繼續實施它,或者使用其他方法來實現它。

+0

你可能想檢查[我的例子](http://stackoverflow.com/questions/15819318/how-to-create-and-connect-custom-user-buttons-controls-with-lines-using-windows/15821573#15821573)的一個類似的事情。 –

+0

我喜歡你的例子,我開始認爲我應該使用組合框,然後在其中包含一些列表視圖,其中包含必要的屬性,屬性等.. :) –

回答

1

您不妨考慮ListView控件,或許與膨脹,是這樣的:

<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> 

這將大小根據需要最多給予最大。列表視圖項目可以包含任何類型的內容(不只是文本),如上所示。你會想了解一下Style和Control模板。 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中(編程)。

+0

好吧,這可以工作。不過我覺得有一個問題。我想動態地分配有多少ListViewItems ..我的意思是,當我畫在畫布中的框,它應該是空的,然後當我按下一個按鈕,項目應該被添加到正確的標題下..我不'看看如何使用上面的設置。 –