2011-02-15 2 views
0

내 문제는 다음과 같습니다. 캔버스가 있고 "노드"라는 클래스가 있습니다. 노드 모음을 만들고 각 노드에 대해 캔버스의 특정 위치에 일부 모양 (타원, 삼각형, 문자)이 필요합니다.C# 및 Silverlight의 다음 문제를 어떻게 해결할 수 있습니까? (캔버스에 모양)

노드를 클릭하면 부모 노드 객체로 돌아가서 변경할 수 있어야합니다.

원본 소스의 유형이 Ellipse (또는 다른 Shape)이고 Node 유형이 아니기 때문에 MouseLeftButtonUp 수신기를 추가 한 다음 e.OriginalSource로 이동합니다.

나는이 문제에 대한 두 가지 솔루션을 참조하십시오

1) 등의 노드 ID로 타원, 데이터를 첨부 할 수있는 방법이 있다면, 그 Ellipse.AddLogicalChild 또는 Ellipse.SetCurrentValue 같은 좋은 (뭔가를 할 것입니다 , 그러나 그것이 효과가 있을지 또는 그러한 방법 중 하나를 사용하는 것이 적절할 것인지 확신 할 수 없다). 2) 또는 노드를 Canvas.Children에 직접 추가 할 수 있도록 Shape 클래스를 파생시킬 필요가 있습니다.

어떻게하나요? 또는 다른 해결책을 찾으면 알려주십시오.

감사합니다,

안톤 Kanevsky

+0

매핑 – Stecya

답변

1

노드 클래스는 원하는 모양을 내용으로 호스팅하는 usercontrol 일 수 있습니다. 즉 : 생성자에서 원하는 모양을 만들고 내용으로 설정 한 다음 그리드에 노드를 추가합니다.

또는 모양을 노드 클래스의 구성원으로 만들거나 노드 클래스의 함수로 구독 할 수 있습니다. 즉, 각 쉐이프는 연관된 노드 클래스에서 이벤트를 시작합니다.

+0

에 사전 을 사용하면 솔루션에 대해 더 자세히 설명해 주시겠습니까? – akanevsky

+0

어느 것? 첫 번째는 간단합니다. 노드라는 빈 usercontrol을 만들고 사용자 정의 노드 코드를 추가 한 다음 생성자에서 열거 형을 사용하여 모양 유형을 결정한 다음 열거 형 값을 기반으로 생성자에서 새로운 모양을 만들고 설정합니다. as this.Content = newShape name; – Sogger

+0

둘째, 노드 클래스에서 모양 클릭 이벤트를 처리 할 함수를 작성하십시오. 각 셰이프 노드 연관 세트에 대해 노드의 기능을 파트너 셰이프의 이벤트에 등록하십시오. 이렇게하면 일대일 매핑이 만들어집니다. 노드 함수가 실행되면 더 높은 클래스에서 더 일반적인 목적 함수를 호출 할 수 있습니다. 'this'(노드 참조)를 모양 참조와 함께 전달하면 둘 다 함께 처리 할 수 ​​있습니다. – Sogger

1

당신은 당신의 모양과 모든 노드에 아픈 참조에 대한 사전 컨테이너를 사용할 수 있습니다. 노드가 도형을 가지게하려면