코드를 통해 캔버스에 지오메트리 개체를 추가해야합니다. 버튼을 클릭하면 모양이 추가됩니다. 함수에 매개 변수로 캔버스를 보낸 다음 canvas.children.add()를 사용하지만 그 종류의 나사는 전체 mvvm 아이디어가 아닌가요? 그것을 할 수있는 더 좋은 방법이 있습니까?wpf를 사용하여 캔버스에 도형을 추가하는 가장 좋은 방법은 무엇입니까?
3
A
답변
-1
아니요, 더 좋은 방법은 없습니다.
XAML에서 모양을 정의하면 모양이 Canvas.Children에 추가()됩니다.
이제 Mvvm 방식으로 깨끗하게 만들고 싶다면 viewmodel으로 창의력을 발휘해야 할 것입니다. 핸들러에서 ObservableCollection에 어떤 종류의 객체를 추가 한 다음 뷰에서 무언가를 수행하여 ViewModel Collection에서 모양을 만들면 버튼에 대한 VM ICommand를 추가 할 수 있습니다. (xaml 또는 코드 숨김)
5
ItemsControl
과 Canvas
을 항목 패널로 사용할 수 있습니다. 그런 다음 VM에서 모든 항목을 보유 할 컬렉션이 필요합니다. 각 항목에는 배치를위한 모든 특성이 있어야합니다.
항목 : 다음 VM에서
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
}
:
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. 여러 도형을 함께 그룹화하는 가장 좋은 방법은 무엇입니까?
- 2. html5 - 캔버스에 그려진 도형을 확인하는 방법은 무엇입니까?
- 3. StageXL에서 기본 도형을 추가하는 방법은 무엇입니까?
- 4. wpf를 사용하여 인쇄하는 가장 좋은 방법 4
- 5. "동적"컨트롤을 추가하는 가장 좋은 방법은 무엇입니까?
- 6. 조각에 리스너를 추가하는 가장 좋은 방법은 무엇입니까
- 7. "+"및 "-"를 추가하는 가장 좋은 방법은 무엇입니까?
- 8. Solr에 스케줄러를 추가하는 가장 좋은 방법은 무엇입니까?
- 9. AJAX에서 데이터를 추가하는 가장 좋은 방법은 무엇입니까?
- 10. gridView에 셀을 추가하는 가장 좋은 방법은 무엇입니까?
- 11. WPF에서 캔버스의 도형을 이동하는 방법은 무엇입니까?
- 12. 코드에서 WPF 창에 도형을 추가하는 방법은 무엇입니까?
- 13. 캔버스에 슬라이드 효과를 만드는 가장 좋은 방법은 무엇입니까?
- 14. 브러쉬를 복사/복제하는 가장 좋은 방법은 무엇입니까?
- 15. Firebase를 사용하여 친구를 추가하는 가장 좋은 방법은 무엇입니까?
- 16. TFS API를 사용하여 파일에 레이블을 추가하는 가장 좋은 방법은 무엇입니까?
- 17. 자바 코드를 사용하여 도형을 XML 레이아웃에 추가하는 방법은 무엇입니까?
- 18. ReportLab의 캔버스 요소에 하이퍼 링크를 추가하는 가장 간단한 방법은 무엇입니까?
- 19. 좋은 연습을 존중하여 WPF를 사용하여 새 창을 여는 방법은 무엇입니까?
- 20. 캔버스에 수직 스크롤바를 추가하는 방법은 무엇입니까?
- 21. 캔버스에 표 배경을 추가하는 방법은 무엇입니까? (fabricjs)
- 22. GWT - 키보드 리스너를 캔버스에 추가하는 방법은 무엇입니까?
- 23. 플렉스에서 캔버스에 세로 스크롤을 추가하는 방법은 무엇입니까?
- 24. 공기 기본 확장을 사용하여 UIApplicationDelegate에 후크를 추가하는 가장 좋은 방법은
- 25. WPF를 사용하여 스크롤 영역에서 수천 개의 컨트롤을 만드는 가장 좋은 방법은 무엇입니까?
- 26. 네이티브 WPF 컨트롤을 사용하여 마법사를 만드는 가장 좋은 방법은 무엇입니까
- 27. 편지의 일부를 색칠하는 가장 좋은 방법은 무엇입니까?
- 28. WPF를 사용하여 2D 드로잉에 사용할 컨트롤은 무엇입니까?
- 29. Subversion을 사용하여 양분하는 가장 좋은 방법은 무엇입니까?
- 30. xml을 사용하여 개체를로드합니다. 가장 좋은 방법은 무엇입니까?