我需要通過代碼將幾何對象添加到畫布中。意思是當您單擊按鈕時添加了形狀。我將canvas作爲參數發送給函數,然後使用canvas.children.add(),但是這種方式會影響整個mvvm的想法,不是嗎?有沒有更好的方法來做到這一點?使用wpf將圖形添加到畫布的最佳方法是什麼?
3
A
回答
-1
不,沒有更好的方法來做到這一點。
如果您在XAML中定義形狀,它們將Add()'編輯到Canvas.Children中的方式相同。
現在,如果你想以乾淨的Mvvm方式來做到這一點,那麼你可能不得不用你的視圖模型來獲得創造性。我會爲該按鈕添加一個VM ICommand(因此您可以連接它),在處理程序中,我將某種對象添加到ObservableCollection,然後在視圖中執行某些操作以從該ViewModel集合創建形狀(在xaml或代碼隱藏中)
5
您可以使用ItemsControl
和Canvas
作爲它的項目面板。然後在虛擬機中,您需要一個集合來保存所有項目。每個項目應具有所有放置屬性。
所以,在代碼中,它看起來像這樣(我省略爲簡潔變更通知):
項:
public class CanvasShape : INotifyPropertyChanged
{
public double Top {get; set;}//TODO: add change notification
public double Left {get; set;}//TODO: add change notification
public Geometry PathData {get; set;}//TODO: add change notification
}
在VM:
public ObservableCollection<CanvasShape> Shapes {get; set;}
.....
//Add some logic to fill the collection
在XAML中:
<!--The DataContext here is the VM-->
<ItemsControl ItemsSource="{Binding Shapes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<!--These setters will control the position of the shape; the DataContext here is CanvasShape-->
<Setter Property="Cavas.Top" Value="{Binding Top}"/>
<Setter Property="Cavas.Left" Value="{Binding Left}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Path Data="{Binding PathData}"
.......
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
相關問題
- 1. WPF:將圖形添加到畫布中
- 2. 將Last屬性添加到System.Array的最佳方法是什麼?
- 3. 用低cpu使用動畫畫布的最佳方法是什麼?
- 4. 用javascript添加css到頁面的最佳方法是什麼?
- 5. 用畫布繪製圖形並設置角度的最佳方式是什麼?
- 6. 什麼是將內容添加到模板的最佳方式?
- 7. 將數組添加到Mysql的最佳方式是什麼
- 8. 將單元格添加到gridView的最佳方式是什麼?
- 9. 用UIImageView創建條形圖的最佳方法是什麼?
- 10. 什麼是在畫布上動畫的最佳方式?
- 11. 使用WPF中的設置將子圖像添加到畫布#
- 12. 什麼將是層圖像的畫廊的最佳方式?
- 13. 在WPF中渲染圖表的最佳方法是什麼?
- 14. 將.mmmodel文件添加到我的xcode9項目的最佳方法是什麼?
- 15. HTML5-移動畫布上已有圖像的最佳方法是什麼
- 16. 使用PHP發佈到Web API的最佳方式是什麼?
- 17. 什麼是將多個圖像添加到progrram(qt)的最佳方式
- 18. 將TextView添加到遊戲主視圖的最佳方式是什麼?
- 19. 在Jung中克隆圖形的最佳方法是什麼?
- 20. 在LaTeX中繪製條形圖的最佳方法是什麼?
- 21. 將項目添加到RecycleAdapter前面的最佳方法是什麼?
- 22. 將SSIS(商業智能)項目添加到SourceSafe的最佳方法是什麼?
- 23. 將此javascript添加到Asp.Net網站的最佳方法是什麼?
- 24. 將「forCount」控件結構添加到Objective-C的最佳方法是什麼?
- 25. 將空格添加到文本文件的最佳方法是什麼?
- 26. 將第三方腳本添加到dom中的最佳做法是什麼?
- 27. 將鍵/值添加到現有URL字符串的最佳方法是什麼?
- 28. 強制WPF DataGrid添加特定新項目的最佳方法是什麼?
- 29. 使用JQuery動態添加HTML的最佳方式是什麼?
- 30. WPF:將項目添加到ListView的最有效/最快的方式是什麼?